summaryrefslogtreecommitdiff
path: root/test/ragelambig1.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragelambig1.lm')
-rw-r--r--test/ragelambig1.lm72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ragelambig1.lm b/test/ragelambig1.lm
new file mode 100644
index 0000000..845a07b
--- /dev/null
+++ b/test/ragelambig1.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
+ [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]
+
+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></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></term></expression></start>