summaryrefslogtreecommitdiff
path: root/test/ragelambig3.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragelambig3.lm')
-rw-r--r--test/ragelambig3.lm72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ragelambig3.lm b/test/ragelambig3.lm
new file mode 100644
index 0000000..74b7254
--- /dev/null
+++ b/test/ragelambig3.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_short]
+| [expression `& term_short]
+| [expression `- term_short]
+| [expression `-- term_short]
+| [term_short]
+
+# Works, but is confusing.
+def term_short
+ reducefirst
+ [term]
+
+def term
+ [term factor_with_rep]
+| [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_short><term><factor_with_rep><factor_with_neg><factor><alphabet_num><uint>1</uint></alphabet_num></factor></factor_with_neg></factor_with_rep></term></term_short></expression><_literal_0007>-</_literal_0007><term_short><term><factor_with_rep><factor_with_neg><factor><alphabet_num><uint>1</uint></alphabet_num></factor></factor_with_neg></factor_with_rep></term></term_short></expression></start>