context ctx i: int j: int k: int lex ignore /space+/ literal '*', '(', ')' token id /[a-zA-Z_]+/ end def foo [id] def item [id] | [foo] | ['(' item* ')'] { i = 0 j = i + 1 k = j + 1 print( k '\n' ) } def start [item*] end ctx CTX: ctx = cons ctx[] parse InputP: ctx::start( CTX ) [ stdin ] Input: ctx::start = InputP.tree print( Input '\n' )