我一直在尝试编写自己的编译器,以便于教育目的,并且我遇到了一个问题。我采用了递归下降的方法,并具有一些关于lex和yacc/bison的先前知识。
到目前为止,我只是试图处理解析方面的问题,而不考虑AST或代码生成的生成。
我正在尝试为这个特定语法文件部分编写表达式解析。
primary_expression
: IDENTIFIER
| CONSTANT
| STRING_LITERAL
| '(' expression ')'
;
postfix_expression
: primary_expression
| postfix_expression '[' expression ']'
| postfix_expression '(' ')'
| postfix_expression '(' argument_expression_list ')'
| postfix_expression '.' IDENTIFIER
| postfix_expression PTR_OP IDENTIFIER
| postfix_expression INC_OP
| postfix_expression DEC_OP
;
到目前为止,我有这段代码。
void Parser::primaryExpression()
{
if (accept(Token::eIdentifier))
{
}
else if (accept(Token::eIntNumber))
{
}
else if (accept('('))
{
expression();
expect(')');
}
}
void Parser::postfixExpression()
{
}
我在处理后缀表达式的递归时遇到了一些问题,不知道如何继续使用postfixExpression
函数。
我觉得对于递归下降解析器,我应该以不同的方式安排我的语法。
有人能指点我正确的方向吗?