gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:37 26 4
gpt4 key购买 nike

我在学校有一项作业,要求我们用 Java 创建一个遵循以下语法的自顶向下解析器:

    assign = id , '=' , expr , ';' ;
expr = term , [ ( ’+’ | ’-’ ) , expr ] ;
term = factor , [ ( ’*’ | ’/’) , term] ;
factor = int | ’(’ , expr , ’)’ ;

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

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

我检查标记以查看是否存在术语,然后检查是否存在“+标记”或“-标记”,最后检查是否存在“expr”。但是,如果我检查那里是否有“expr”,它将循环,并最终再次检查是否有“expr”,然后一次又一次。

我不明白如何才能让它发挥作用?有人可以帮助我吗?

亲切的问候,

最佳答案

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

他不用担心!

这需要一些思考,但当调用 C1 时实际发生的情况是,被调用的 expr 规则测试一个术语。如果这是构成 expr 的被加数集中的最后一项,则不会有后面的加/减,并且 C1 调用将终止并返回到父解析例程,然后父解析例程将完成。无循环。

如果它不是最后一项,则该项将被解析,加/减将被看到,并且 C1 实例将再次调用 C2 返回到 expr。此递归的行为类似于一次循环迭代,并按照我们所描述的方式进行处理。

应该可以正常工作。

关于java - 使用递归语法的自顶向下解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33667793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com