- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近开始研究使用 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/
我有如下字符串: val:key 我可以使用 /^\w*/ 捕获“val”。 我现在如何获取“key”而不“:”符号? 谢谢 最佳答案 这个怎么样? /^(\w+):(\w+)$/ 或者,如果您只想捕
再次搜索相同模式时是否可以使用正则表达式找到重叠匹配项?我希望能够找到出现三次的匹配项。例如,bababa 在 babababab 中出现了 3 次: 巴巴布巴巴布 babababab 爸爸爸爸 这是
我正在尝试提出正则表达式 block ,该 block 将使用 JavaScript 从 cucumber 样本中提取表。 cucumber 样本如下 Feature: Sample Feature
这个问题已经有答案了: Reference - What does this regex mean? (1 个回答) 已关闭 7 年前。 我了解到lookahead正则表达式是这样的x(?=y)和意味
我的解析器生成器(使用 javaCC)有问题 我有这个错误: Warning: Choice conflict involving two expansions at line 119, c
我正在编写一个小型java程序来进行一些数据库清理,当它们与某些关键字出现在同一个句子中时,我需要从大文本 block 中提取日期,并且我遇到了一些奇怪的行为想不通。例如,以下正则表达式: "(?=.
我需要使用正则表达式来匹配一个字符串 holiding html 以拉出所有嵌套的跨度,我假设我假设有一种方法可以使用正则表达式来执行此操作,但整个上午都没有成功。 所以对于示例输入字符串
我最近开始研究使用 javacc 的语法分析器,其中一个字段是选项 one...我有如下代码: options { LOOKAHEAD=1; } PARSER_BEGIN(Calculator)
我无法将此正则表达式转换为 Golang 支持的内容。我能得到一些帮助吗?它最初来自 this SO question . ^(?=.{1,24}$)(?![_.])(?!.*[_.]{2})[a-z
我正在尝试制作两个匹配 URI 的正则表达式。这些 URI 的格式为:/foo/someVariableData 和 /foo/someVariableData/bar/someOtherVariab
我刚刚更详细地了解了这两个概念。我一直对 RegEx 很好,似乎我从未见过这 2 个零宽度断言的必要性。 我很确定我错了,但我不明白为什么需要这些结构。考虑这个例子: Match a 'q' whic
让我留下以下字符串列表,在 JavaScript (NodeJS) 中,我想一次应用一个正则表达式并替换 . 和 . 之间的哈希值,但我不想替换这个词,.style。或 .bundle. 或 .chu
我有以下正则表达式来验证字符串中的条件,我在在线正则表达式 validator 上编写了它,但是当我在 Java 代码中使用它时出现异常: "(^([a-z]{1,6})(?(?=(_))(([_])
我很难搞清楚如何识别某些文本,前提是它之前和之后都有特定的东西。任务是识别 AND、OR 和 NOT,但如果它们是单词的一部分则不是: 他们应该在这里被识别: x AND y (x)AND(y) NO
我有一串以逗号分隔的字符,需要拆分。不过,其中一些字符可能是逗号。例如: test = "a,b,c,d,,,e,f,g" 我知道(?
我正在尝试匹配 Java 中没有 .jsp/.jspx 扩展名的字符串,并且在负向先行模式方面遇到了很多困难。 给定一堆字符串: String string1 = "templateName"; St
我有以下TT.jj,如果我取消注释下面的SomethingElse部分,它会成功解析create create blahblah形式的语言> 或创建废话。但是,如果我注释掉下面的 SomethingE
我想创建一个可以识别字符串中的等号的正则表达式。唯一的条件是等号前面不能有以下字符:“”、“~”和“=”。它后面也不能跟这个字符“=”。我使用的正则表达式语句是这样的:(?~=])=(?=[^=])并
这应该很简单,但我是菜鸟,我一辈子也搞不懂。我正在尝试使用正则表达式来匹配特殊打开/关闭标签内的文本:[p2][/p2] 所以在这段文字中: apple [p2]banana[/p2] grape [
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!