我尝试使用编写一个基本的语法检查器bisonc++
规则是:
expression -> OPEN_BRACKET expression CLOSE_BRACKET
expression -> expression operator expression
operator -> PLUS
operator -> MINUS
如果我尝试运行编译后的代码,我会在这一行得到一个错误:
(a+b)-(c+d)
应用第一条规则,最左边和最右边的括号是 theOPEN_BRACKET
和CLOSE_BRACKET
。剩下expression
的是:a+b)-(c+d
如何防止这种行为?是否可以计算开括号和闭括号?
编辑
表达式语法:
expression:
OPEN_BRACKET expression CLOSE_BRACKET
{
//
}
| operator
{
//
}
| VARIABLE
{
//
}
;
operator:
expression PLUS expression
{
//
}
| expression MINUS expression
{
//
}
;
编辑2
词法分析器
CHAR [a-z]
WS [ \t\n]
%%
{CHAR}+ return Parser::VARIABLE;
"+" return Parser::PLUS;
"-" return Parser::MINUS;
"(" return Parser::OPEN_BRACKET;
")" return Parser::CLOSE_BRACKET;