我正在寻找此堆栈溢出问题的答案:Can somebody walk me through what this question is trying to ask of me?
它要求执行以下操作,正如答复者所解释的:
编写两个功能,
ifblock logic_expr
作为您选择的语言的递归下降解析器的一部分。
<ifblock> --> if(<logic_expr>){<stmts>} [else {<stmts>}] <logic_expr> --> <value> == <value> | <value> != <value>
对于其他非终端符号,'stmts'和'value',可以假定存在相同名称的预写函数。
要从输入流中获取下一个标记,您可以调用'lex()',它返回一个代码,如终端符号的代码中所列。通过调用“ lex()”请求令牌代码来实现“ ifblock”,并根据语言语法对那些具有所需令牌的令牌进行评估和匹配。
要评估'if'的逻辑表达式,您需要进入函数'logic_expr',您需要编写该函数以评估语法中定义的逻辑表达式,并且您可以假定非终结符'值”已经存在。
答案可能是这样。当然,这只是语法分析器的截断的伪代码,没有太多的错误处理或AST构建器。
void parse() {
while (!EOF)
if (lex() == IF)
ifblock()
else // what is it?
}
void ifblock () {
if (lex() != LP)
return_error;
le = logic_expr();
if (lex() != RP)
return_error;
// parse statements in {}, optional else (if (lex() == ELSE) with {}
// if no errors
create_if_node(le, st, ...);
}
void logic_expr()
v1 = value();
op = lex();
v2 = value();
if (op == EQ)
return create_eq_node(v1, v2);
else if (op == NEQ)
return create_neq_node(v1, v2);
return_error();
}