diff options
Diffstat (limited to 'test/ragelambig4.lm')
-rw-r--r-- | test/ragelambig4.lm | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/ragelambig4.lm b/test/ragelambig4.lm new file mode 100644 index 00000000..d489bca3 --- /dev/null +++ b/test/ragelambig4.lm @@ -0,0 +1,69 @@ +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 [term expression_op*] + +def expression_op + ['|' term] +| ['&' term] +| ['-' term] +| ['--' term] + +def term [factor_rep term_op_list_short] + +# This list is done manually to get shortest match. +def term_op_list_short + [] +| [term_op term_op_list_short] + +def term_op + [factor_rep] +| ['.' factor_rep] +| [':>' factor_rep] +| [':>>' factor_rep] +| ['<:' factor_rep] + +def factor_rep + [factor_neg factor_rep_op*] + +def factor_rep_op + ['*'] +| ['**'] +| ['?'] +| ['+'] +| ['{' factor_rep_num '}'] +| ['{' ',' factor_rep_num '}'] +| ['{' factor_rep_num ',' '}'] +| ['{' factor_rep_num ',' factor_rep_num '}'] + +def factor_rep_num [uint] + +def factor_neg + ['!' factor_neg] +| ['^' factor_neg] +| [factor] + +def factor + [alphabet_num] +| [word] +| ['(' expression ')'] + +def alphabet_num + [uint] +| ['-' uint] |