Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: packages/petitparser/lib/src/json/grammar.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 part of petitparser.json;
2
3 /// JSON grammar.
4 class JsonGrammar extends GrammarParser {
5 JsonGrammar() : super(const JsonGrammarDefinition());
6 }
7
8 /// JSON grammar definition.
9 class JsonGrammarDefinition extends GrammarDefinition {
10 const JsonGrammarDefinition();
11
12 start() => ref(value).end();
13 token(p) => p.flatten().trim();
14
15 array() => ref(token, char('['))
16 & ref(elements).optional()
17 & ref(token, char(']'));
18 elements() => ref(value).separatedBy(ref(token, char(',')), includeSeparators: false);
19 members() => ref(pair).separatedBy(ref(token, char(',')), includeSeparators: f alse);
20 object() => ref(token, char('{'))
21 & ref(members).optional()
22 & ref(token, char('}'));
23 pair() => ref(stringToken)
24 & ref(token, char(':'))
25 & ref(value);
26 value() => ref(stringToken)
27 | ref(numberToken)
28 | ref(object)
29 | ref(array)
30 | ref(trueToken)
31 | ref(falseToken)
32 | ref(nullToken);
33
34 trueToken() => ref(token, string('true'));
35 falseToken() => ref(token, string('false'));
36 nullToken() => ref(token, string('null'));
37 stringToken() => ref(token, ref(stringPrimitive));
38 numberToken() => ref(token, ref(numberPrimitive));
39
40 characterPrimitive() => ref(characterNormal)
41 | ref(characterEscape)
42 | ref(characterUnicode);
43 characterNormal() => pattern('^"\\');
44 characterEscape() => char('\\')
45 & pattern(new List.from(jsonEscapeChars.keys).join());
46 characterUnicode() => string('\\u')
47 & pattern("0-9A-Fa-f").times(4);
48 numberPrimitive() => char('-').optional()
49 & char('0').or(digit().plus())
50 & char('.').seq(digit().plus()).optional()
51 & pattern('eE').seq(pattern('-+').optional()).seq(digit().plus()).optional ();
52 stringPrimitive() => char('"')
53 & ref(characterPrimitive).star()
54 & char('"');
55
56 }
57
58 const jsonEscapeChars = const {
59 '\\': '\\',
60 '/': '/',
61 '"': '"',
62 'b': '\b',
63 'f': '\f',
64 'n': '\n',
65 'r': '\r',
66 't': '\t'
67 };
OLDNEW
« no previous file with comments | « packages/petitparser/lib/src/debug/trace.dart ('k') | packages/petitparser/lib/src/json/parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698