summaryrefslogtreecommitdiff
path: root/test/ragelambig1.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragelambig1.lm')
-rw-r--r--test/ragelambig1.lm65
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]