| OLD | NEW |
| (Empty) |
| 1 part of petitparser.lisp; | |
| 2 | |
| 3 /// LISP grammar. | |
| 4 class LispGrammar extends GrammarParser { | |
| 5 LispGrammar() : super(new LispGrammarDefinition()); | |
| 6 } | |
| 7 | |
| 8 /// LISP grammar definition. | |
| 9 class LispGrammarDefinition extends GrammarDefinition { | |
| 10 | |
| 11 start() => ref(atom).star().end(); | |
| 12 | |
| 13 atom() => ref(atom_).trim(ref(space)); | |
| 14 atom_() => ref(list) | |
| 15 | ref(number) | |
| 16 | ref(string) | |
| 17 | ref(symbol) | |
| 18 | ref(quote) | |
| 19 | ref(quasiquote) | |
| 20 | ref(unquote) | |
| 21 | ref(splice); | |
| 22 | |
| 23 list() => ref(bracket, '()', ref(cells)) | |
| 24 | ref(bracket, '[]', ref(cells)) | |
| 25 | ref(bracket, '{}', ref(cells)); | |
| 26 cells() => ref(cell) | |
| 27 | ref(empty); | |
| 28 cell() => ref(atom) & ref(cells); | |
| 29 empty() => ref(space).star(); | |
| 30 | |
| 31 number() => ref(number_).flatten(); | |
| 32 number_() => anyIn('-+').optional() | |
| 33 & char('0').or(digit().plus()) | |
| 34 & char('.').seq(digit().plus()).optional() | |
| 35 & anyIn('eE').seq(anyIn('-+').optional()).seq(digit().plus()).optional(); | |
| 36 | |
| 37 string() => ref(bracket, '""', ref(character).star()); | |
| 38 character() => ref(characterEscape) | ref(characterRaw); | |
| 39 characterEscape() => char('\\') & any(); | |
| 40 characterRaw() => pattern('^"'); | |
| 41 | |
| 42 symbol() => ref(symbol_).flatten(); | |
| 43 symbol_() => pattern('a-zA-Z!#\$%&*/:<=>?@\\^_|~+-') | |
| 44 & pattern('a-zA-Z0-9!#\$%&*/:<=>?@\\^_|~+-').star(); | |
| 45 | |
| 46 quote() => char('\'') & ref(list); | |
| 47 quasiquote() => char('`') & ref(list); | |
| 48 unquote() => char(',') & ref(list); | |
| 49 splice() => char('@') & ref(list); | |
| 50 | |
| 51 space() => whitespace() | ref(comment); | |
| 52 comment() => char(';') & Token.newlineParser().neg().star(); | |
| 53 bracket(String brackets, Parser parser) => char(brackets[0]) & parser & char(b
rackets[1]); | |
| 54 | |
| 55 } | |
| OLD | NEW |