这是我目前的语法:
program -> stmt-sequence
stmt-sequence -> statement { TT_NEWLINE statement }
assign-stmt -> var identifier TT_EQ factor
print-stmt -> print factor
add-stmt -> add factor TT_COMMA factor
sub-stmt -> sub factor TT_COMMA factor
mul-stmt -> mul factor TT_COMMA factor
div-stmt -> div factor TT_COMMA factor
factor -> number | identifier对于我的数学语句(add-stmt、sub-stmt、mul-stmt、div-stmt),我希望这些语句返回一个数字,就像它们是函数一样。
如果你不明白我所说的“返回”是什么意思,那么这里有一个例子:
print add 2, 4我希望将数学语句“替换”为数字,即语句相加后的结果。
print 6^基本上,变成这样。
factor -> number | identifier | add-stmt | sub-stmt | mul-stmt | div-stmt我不知道在因子中添加数学语句的替代是否合适。
我如何才能在EBNF语法中基本上允许这些数学语句“返回”?
发布于 2020-11-15 19:07:09
数学语句不应该包含return终端,它不是定义return终端/语句的一部分。相反,您可以定义一个新符号,如
return-stmt -> TT_RETURN expr之后,您将定义什么是expr。它是产生一个值的东西:
expr -> factor | add-stmt | sub-stmt | mul-stmt | div-stmt在如何定义return-stmt以及如何使用已有的语句/表达式时要小心。您不应该能够生成如下文本/代码:
return return 4 + return 2 * 3https://stackoverflow.com/questions/64841699
复制相似问题