现在,咱再加上对括号的支持。
在lemon的语法文件里加上括号的语法规则,在lex的词法规则里加上左右括号的定义。
example.y
expr(A) ::= LP expr(B) RP. { /* () */
A.value = B.value;
A.n = B.n + 1;
}
lexer.l
"(" { return TOKEN_LP; }
")" { return TOKEN_RP; }
Makefile
# Version
VERSION = 0.0.1
# Compiler flags
CFLAGS = -Wall -W -O2 -s -pipe
CLMFLAGS = -Wall -W -O2 -s -pipe -lm
LFLAGS = -O2 -s -pipe
calc: main.c lex
g++ -o calc -s -pipe main.c lexer.o -lm
lex: lexer.l example
flex lexer.l
test -e lex.yy.c && mv lex.yy.c lexer.c
gcc -o lexer.o -c lexer.c
example: example.y
lemon example.y
#test -e example.c && mv example.c example.cpp
clean:
rm -f calc example.c lexer.c dcalc *.o *.out