首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用递归语法的自顶向下解析

使用递归语法的自顶向下解析
EN

Stack Overflow用户
提问于 2015-11-12 09:08:59
回答 1查看 625关注 0票数 1

我在学校有一个作业,告诉我们用Java创建一个自上而下的分析器,它遵循以下语法:

代码语言:javascript
运行
复制
    assign = id , '=' , expr , ';' ;
    expr = term , [ ( ’+’ | ’-’ ) , expr ] ;
    term = factor , [ ( ’*’ | ’/’) , term] ;
    factor = int | ’(’ , expr , ’)’ ;

我想我已经理解了解析的基本概念,例如“如果我们有一个id,检查下一个令牌是否为'=‘,下一个标记是否为expr,以及后面的一个是否为';'”。对,是这样?

现在,如果我想检查传入的输入是否是表达式:

我检查令牌,看看是否有一个术语,然后如果有一个"+令牌“或-令牌”,最后,如果有一个"expr“。但是,如果我检查那里是否有"expr",它就会循环,并最终检查,如果有"expr“,然后一次又一次地检查。

我看不出我怎么也能做到这一点吗?有人能帮我吗?

致以亲切的问候,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-12 10:33:07

OP似乎担心,如果他为expr规则的代码调用expr的解析规则,它将陷入无限循环。

他不用担心!

这需要一些思考,但当调用C1时,实际发生的情况是,调用expr规则对一个术语进行测试。如果这是包含expr的一组求和中的最后一个术语,那么就不会有后续的加/减,并且C1调用将终止并返回到父解析例程,然后这个例程将完成。没有循环。

如果不是最后一个术语,则将解析该术语,然后会看到加/减,并且C1实例将再次调用C2返回expr。这种递归的作用就像一个循环迭代,并得到我们已经描述过的处理。

应该能正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33667793

复制
相关文章

相似问题

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