diff options
Diffstat (limited to 'test/maxlen.lm')
-rw-r--r-- | test/maxlen.lm | 57 |
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> |