gpt4 book ai didi

java - 删除选择冲突而不向前看 - JavaCC

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:25 27 4
gpt4 key购买 nike

我正在尝试在 JavaCC 中制定以下生产规则,但出现了选择冲突错误。我知道如何使用前瞻来修复它,但我的印象是我们不允许将它用于我们的作业。

void statement() #void:{}
{
<ID> (<ASSIGN>(expression() | <STRING> ))| <LEFTBRACKET>argument_list()<RIGHTBRACKET>
| <NOT>expression()
| <QUESTIONMARK><ID>
| <LEFTBRACE>(statement()<SEMICOLON>)*<RIGHTBRACE>
| <IF>condition()<THEN>statement() <-- Conflict, parser will always pick this one
| <IF>condition()<THEN>statement()<ELSE>statement() <--
| <WHILE>condition()<DO>statement()
| {}
}

感谢任何想法!

最佳答案

这是来自 JavaCC lookahead tutorial 的经典“悬挂其他”问题.您应该将两个 if 产生式替换为具有可选 else 的单个 if-then-else 产生式;您还应该在 else 前面添加 LOOKAHEAD(1),如下所示:

| <IF>condition()<THEN>statement()
| <IF>condition()<THEN>statement()<ELSE>statement()

成为

| <IF>condition()<THEN>statement() [LOOKAHEAD(1) <ELSE>statement()] 

关于java - 删除选择冲突而不向前看 - JavaCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901948/

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