首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在EBNF中使用语句实现一个"return“数字?

问如何在EBNF中使用语句实现一个"return“数字?
EN

Stack Overflow用户
提问于 2020-11-15 14:14:39
回答 1查看 71关注 0票数 0

这是我目前的语法:

代码语言:javascript
复制
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),我希望这些语句返回一个数字,就像它们是函数一样。

如果你不明白我所说的“返回”是什么意思,那么这里有一个例子:

代码语言:javascript
复制
print add 2, 4

我希望将数学语句“替换”为数字,即语句相加后的结果。

代码语言:javascript
复制
print 6

^基本上,变成这样。

代码语言:javascript
复制
factor          -> number | identifier | add-stmt | sub-stmt | mul-stmt | div-stmt

我不知道在因子中添加数学语句的替代是否合适。

我如何才能在EBNF语法中基本上允许这些数学语句“返回”?

EN

回答 1

Stack Overflow用户

发布于 2020-11-15 19:07:09

数学语句不应该包含return终端,它不是定义return终端/语句的一部分。相反,您可以定义一个新符号,如

代码语言:javascript
复制
return-stmt  -> TT_RETURN expr

之后,您将定义什么是expr。它是产生一个值的东西:

代码语言:javascript
复制
expr         -> factor | add-stmt | sub-stmt | mul-stmt | div-stmt

在如何定义return-stmt以及如何使用已有的语句/表达式时要小心。您不应该能够生成如下文本/代码:

代码语言:javascript
复制
return return 4 + return 2 * 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64841699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档