summaryrefslogtreecommitdiff
path: root/test/maxlen.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/maxlen.lm')
-rw-r--r--test/maxlen.lm57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/maxlen.lm b/test/maxlen.lm
new file mode 100644
index 0000000..2d220d1
--- /dev/null
+++ b/test/maxlen.lm
@@ -0,0 +1,57 @@
+##### LM #####
+
+context maxlen
+
+ #
+ # Regular Definitions
+ #
+ rl rl_ws /[ \t\n\r\v]+/
+ rl rl_id /[a-zA-Z_][a-zA-Z0-9_]*/
+
+ #
+ # Tokens
+ #
+
+ lex
+ ignore /rl_ws/
+ token id /rl_id/
+ end
+
+ num: int
+ allow: int
+
+ def item
+ [id]
+ {
+ num = num + 1
+ toomuch: int = allow+1
+ if num == toomuch {
+ reject
+ }
+ }
+
+ def open
+ []
+ {
+ num = 0
+ }
+
+ def close []
+
+ def restricted_list
+ [open item*]
+
+ def start
+ [restricted_list id*]
+end # maxlen
+
+cons MaxLen: maxlen[]
+MaxLen.allow = 3
+
+parse S: maxlen::start(MaxLen)[stdin]
+print_xml( S )
+print('\n')
+##### IN #####
+a b c d e f g
+##### EXP #####
+<maxlen::start><maxlen::restricted_list><maxlen::open></maxlen::open><maxlen::_repeat_item><maxlen::item><maxlen::id>a</maxlen::id></maxlen::item><maxlen::item><maxlen::id>b</maxlen::id></maxlen::item><maxlen::item><maxlen::id>c</maxlen::id></maxlen::item></maxlen::_repeat_item></maxlen::restricted_list><maxlen::_repeat_id><maxlen::id>d</maxlen::id><maxlen::id>e</maxlen::id><maxlen::id>f</maxlen::id><maxlen::id>g</maxlen::id></maxlen::_repeat_id></maxlen::start>