Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revision | db00795b866a7419811acac98d932b2c0e4475ce (tree) |
---|---|
Time | 2021-12-11 00:18:18 |
Author | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
Rewriten grammar.py (old: ~1, new~2; symlink to select, for NOW. Need t rewrite test
@@ -1,37 +1,38 @@ | ||
1 | -//This is a fragment from ../examples/My_GrammarParser.Castle | |
1 | +//This is the PEG version og grammar(2).py | |
2 | 2 | |
3 | - peg_grammar <- rule+ ; | |
4 | - rule <- rule_name '<-' ordered_choice ';' ; | |
5 | - ordered_choice <- sequence ('|' sequence)* ; | |
6 | - sequence <- prefix* ; | |
7 | - prefix <- ( AND | NOT )? suffix ; | |
8 | - suffix <- expression ( '?' | '*' | '+' | '#' )? ; | |
9 | - expression <- regex_term | |
10 | - | rule_crossref | |
11 | - | '(' ordered_choice ')' | |
12 | - | str_term | |
13 | - ; | |
14 | - rule_crossref <- rule_name; | |
15 | - rule_name <- ID ; | |
16 | - str_term <- "'" str_no_s1 "'" | |
17 | - | '"' str_no_d1 '"' | |
18 | - | "'''" str_no_s3 "'''" | |
19 | - | '"""' str_no_d3 '"""' | |
20 | - ; | |
21 | - regex_term <- '/' str_no_slash '/' | |
22 | - | "r'" str_no_s1 "'" | |
23 | - | 'r"' str_no_d1 '"' | |
24 | - | "r'''" str_no_s3 "'''" | |
25 | - | 'r"""' str_no_d3 '"""' | |
26 | - | "R'" str_no_s1 "'" | |
27 | - | 'R"' str_no_d1 '"' | |
28 | - | "R'''" str_no_s3 "'''" | |
29 | - | 'R"""' str_no_d3 '"""' | |
30 | - ; | |
31 | - str_no_slash <- /((\\/)|[^\/])*/ ; | |
32 | - str_no_XXX <- XXX | |
33 | - | ETC | |
34 | - ; | |
35 | - AND <- '&' ; | |
36 | - NOT <- '!' ; | |
3 | +peg_grammar <- rules ; | |
4 | +rules <- rule+ ; | |
5 | +rule <- rule_name '<-' expressions ';' ; | |
37 | 6 | |
7 | +expressions <- single_expr+ ( '|' expressions )? ; | |
8 | +single_expr <- ( rule_crossref | term | group | predicate ) ( '?' | '*' | '+' | '#' )? ; | |
9 | + | |
10 | +term <- str_term | regex_term ; | |
11 | +group <- '(' expressions ')' ; | |
12 | +predicate <- ( '&' | '!' ) single_expr ; | |
13 | + | |
14 | +str_term <- "'" str_no_s1 "'" | |
15 | + | '"' str_no_d1 '"' | |
16 | + | "'''" str_no_s3 "'''" | |
17 | + | '"""' str_no_d3 '"""' | |
18 | + ; | |
19 | +regex_term <- '/' str_no_slash '/' | |
20 | + | "r'" str_no_s1 "'" | |
21 | + | 'r"' str_no_d1 '"' | |
22 | + | "r'''" str_no_s3 "'''" | |
23 | + | 'r"""' str_no_d3 '"""' | |
24 | + | "R'" str_no_s1 "'" | |
25 | + | 'R"' str_no_d1 '"' | |
26 | + | "R'''" str_no_s3 "'''" | |
27 | + | 'R"""' str_no_d3 '"""' | |
28 | + ; | |
29 | + | |
30 | +rule_crossref <- ID ; | |
31 | +rule_name <- ID ; | |
32 | +ID <- /[A-Za-z_][A-Za-z0-9_]*/ ; | |
33 | + | |
34 | +str_no_slash <- /((\\/)|[^\/])*/ ; | |
35 | +str_no_XXX <- XXX | |
36 | + | ETC | |
37 | + ; | |
38 | + |