语法分析表达式生成树
将输入字符流进行词法分析后得到Token流,并对不同类型的词进行染色
对Token流进行语法判断
词法分析效果图:
语法分析文法:
E->A{,A}
A->B{|=B|^=B|&=B|>>=B|<<=B|-=B|+=B|%=B|*=B|/=B|=B}
B->C{!=C|==C}
C->E{>E|>=E|<E|<=E}
E->F{<<F|>>F}
F->G{+G|-G}
G->H{*H|/H|%H}
H->SIZEOFI|~I|!I|&I|*I|--I|++I|+I|-I
I->[E]|(E)|.标识符|->标识符
语法分析测试样例:
正确表达式:
[(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+(&2!=1),1==124,1>=34,sizeof(sizeof(6+2)*6)!=2
[(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+(&2!=1),1==124,1>=34
[(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+(&2!=1),1==124,1>=34,1+2+3+4+5+6+7+8*(12%2)==3
[sizeof(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+sizeof(&2!=1),1==124,1>=34,1+2+3+4+5+6+7+8*sizeof(12%2)==3
错误表达式: (((([(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+(&2!=1),1==124,1>=34,sizeof(sizeof(6+2)*6)!=2
-=[(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+(&2!=1),1==124,1>=34
sizeof1[(1+2)],1!=((1-sizeof(11))/8-6%2)<=(2+3)4+sizeof(&2!=1),1==124,1>=34,1+2+3+4+5+6+7+8*sizeof(12%2)
=-=-=[((1+2))],1!=((1-sizeof(11))/8-6%2)<=(2/3)4+sizeof(&2!=1),1==124,1>=34,1+2+3+4+5+6+7+8sizeof(12%2) /