Lox

Lexer and parser generator for Go

@lexer

NUM = ('0' | [1-9][0-9]*) ('.' [0-9]+)? 
ADD = '+'
SUB = '-'
MUL = '*'
DIV = '/'
O_PAREN = '('
C_PAREN = ')'

@frag ' '+  @discard

@parser

@start S = expr

expr = expr '+' expr  @left(1)
     | expr '-' expr  @left(1)
     | expr '*' expr  @left(2)
     | expr '/' expr  @left(2)
     | '(' expr ')'
     | num

num = NUM | '-' NUM