lex start { ignore /[ \t\n]+/ token id /[a-z0-9]+/ literal ',', '.', '*', '(', ')' } def bigger ['(' item* ')'] def item [id] | [bigger] def lang [item*] B: bigger = construct bigger "( b1 b2 )" print( construct lang "a [B] c" '\n' )