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