【发布时间】:2016-05-29 13:25:56
【问题描述】:
出于教育目的,我一直在尝试编写自己的编译器,但遇到了一个问题。我已经采用了递归下降方法,并具有一些关于 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()
{
}
我在处理 postfix_expression 的递归时遇到了一些问题,我不知道如何继续使用 postfixExpression 函数。
我的印象是,对于递归下降解析器,我可能应该以不同的方式安排我的语法。
谁能指出我正确的方向?
【问题讨论】:
-
查看我关于如何编写递归下降解析器的 SO 答案:stackoverflow.com/questions/2245962/…