gpt4 book ai didi

Javacc 解析器选项 LOOKAHEAD,Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:45 25 4
gpt4 key购买 nike

我最近开始研究使用 javacc 的语法分析器,其中一个字段是选项 one...我有如下代码:

options
{
LOOKAHEAD=1;
}
PARSER_BEGIN(Calculator)

public class Calculator
{
...
}
PARSER_END(Calculator)

LOOKAHEAD 选项到底是什么意思?谢谢

最佳答案

JavaCC 创建递归下降解析器。这种类型的解析器通过查看下一个符号来决定选择哪个规则来工作。默认情况下,它只查看下一个交易品种 (lookahead=1)。但是您可以将解析器配置为不仅查看下一个,而且还查看下一个 N 个符号。如果将 lookahead 设置为 2,生成的解析器将查看接下来的两个符号来决定选择哪个规则。这样,您可以更自然地定义您的语法,但要以牺牲性能为代价。前瞻越大,解析器要做的事情就越多。

如果您将一般先行设置为更大的数字,您的解析器对于所有输入(对于非平凡语法)都会变慢。如果您想让解析器默认使用 lookahead=1 并仅在特定情况下使用更大的 lookahead,则可以在本地使用 lookahead。

http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.5

例如,lookahead=1 的解析器无法决定采用哪条规则(1 或 2),但 lookahead=2 的解析器可以:

void rule0() : {} { 
<ID> rule1()
| <ID> rule2()
}

您可以更改语法的定义以获得相同的结果,但使用 lookahead=1:

void rule0() : {} { 
<ID> ( rule1() | rule2() )
}

关于Javacc 解析器选项 LOOKAHEAD,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2302872/

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