|
1
|
| java.is.for.desktop · 技术社区 · 16 年前 |
|
|
1
2
好吧,看来你需要一种叫做“向前看”的技术。这里有一个很好的教程: Lookahead tutorial 当时我的第一次尝试是错误的,但由于它适用于定义上下文的不同标记,所以我将把它留在这里(也许它对某人有用;o))。 假设我们想要某种标记语言。我们想要的“标记”是:
我们想把单词放在标签里,数字放在标签里。所以如果我说得对,那就是你想做的:如果你在单词上下文中(在单词标记之间),编译器应该期望字母和空白,在数字上下文中它期望数字。 我创建了wordnumber.jj文件,它定义了要生成的语法和语法分析器:
你可以用这样的文件来测试它:
最后一行将导致解析器引发如下异常:
这是因为解析器没有找到预期的结果。 我希望这会有帮助。 干杯! 注意:解析器不能“在”令牌内,因为令牌是一个终端符号(如果我错了,请纠正我),它不能再被生产规则取代。因此,所有上下文方面都必须放在生产规则(非终端)中,就像我的示例中的“wordcontext”。 |
|
|
2
1
你需要使用lexer状态。你的例子变得像:
请注意
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |