diff options
Diffstat (limited to 'test/ragelambig2.lm')
-rw-r--r-- | test/ragelambig2.lm | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ragelambig2.lm b/test/ragelambig2.lm new file mode 100644 index 0000000..39602bc --- /dev/null +++ b/test/ragelambig2.lm @@ -0,0 +1,72 @@ +##### LM ##### +lex + ignore /[\t\n ]+/ + literal `^ `| `- `, `: `! `? `. + literal `( `) `{ `} `* `& `+ + + literal `-- `:> `:>> `<: `-> `** + + token word /[a-zA-Z_][a-zA-Z0-9_]*/ + token uint /[0-9]+/ +end + + +def start + [expression] + { + print_xml( lhs ) + } + +def expression + [expression `| term] +| [expression `& term] +| [expression `- term] +| [expression `-- term] +| [term] + +def term + [factor_with_rep more_term] + +# Can resolve the ambiguity by making more_term shortest match. +def more_term + [] +| [factor_with_rep more_term] +| [`. factor_with_rep more_term] +| [`:> factor_with_rep more_term] +| [`:>> factor_with_rep more_term] +| [`<: factor_with_rep more_term] + +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] + +parse start[ stdin ] +print( '\n' ) +##### IN ##### +1 - 1 +##### EXP ##### +<start><expression><expression><term><factor_with_rep><factor_with_neg><factor><alphabet_num><uint>1</uint></alphabet_num></factor></factor_with_neg></factor_with_rep><more_term></more_term></term></expression><_literal_0007>-</_literal_0007><term><factor_with_rep><factor_with_neg><factor><alphabet_num><uint>1</uint></alphabet_num></factor></factor_with_neg></factor_with_rep><more_term></more_term></term></expression></start> |