summaryrefslogtreecommitdiff
path: root/test/ragelambig2.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragelambig2.lm')
-rw-r--r--test/ragelambig2.lm65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/ragelambig2.lm b/test/ragelambig2.lm
new file mode 100644
index 00000000..70e97c66
--- /dev/null
+++ b/test/ragelambig2.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
+ [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]