diff options
Diffstat (limited to 'test/ragelambig1.lm')
-rw-r--r-- | test/ragelambig1.lm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/ragelambig1.lm b/test/ragelambig1.lm new file mode 100644 index 00000000..1c292fd1 --- /dev/null +++ b/test/ragelambig1.lm @@ -0,0 +1,65 @@ +lex start +{ + ignore /[\t\n ]+/ + literal '^', '|', '-', ',', ':', '!', '?', '.' + literal '(', ')', '{', '}', '*', '&', '+' + + literal '--', ':>', ':>>', '<:', '->', '**' + + token word /[a-zA-Z_][a-zA-Z0-9_]*/ + token uint /[0-9]+/ +} + + +def start + [expression] + { + print_xml( lhs ) + } + +def expression + [expression '|' term] +| [expression '&' term] +| [expression '-' term] +| [expression '--' term] +| [term] + +def term + [term factor_with_rep] + { + if match lhs [term '-' uint] { + reject + } + } +| [term '.' factor_with_rep] +| [term ':>' factor_with_rep] +| [term ':>>' factor_with_rep] +| [term '<:' factor_with_rep] +| [factor_with_rep] + +def factor_with_rep + [factor_with_rep '*'] +| [factor_with_rep '**'] +| [factor_with_rep '?'] +| [factor_with_rep '+'] +| [factor_with_rep '{' factor_rep_num '}'] +| [factor_with_rep '{' ',' factor_rep_num '}'] +| [factor_with_rep '{' factor_rep_num ',' '}'] +| [factor_with_rep '{' factor_rep_num ',' factor_rep_num '}'] +| [factor_with_neg] + +def factor_rep_num [uint] + +def factor_with_neg + ['!' factor_with_neg] +| ['^' factor_with_neg] +| [factor] + +def factor + [alphabet_num] +| [word] +| ['(' expression ')'] + +def alphabet_num + [uint] +| ['-' uint] |