gpt4 book ai didi

antlr - 如何删除 ANTLR3 警告 'multiple alternatives'

转载 作者:行者123 更新时间:2023-12-01 11:09:04 25 4
gpt4 key购买 nike

我在 stackoverflow 中发现了很多与“多个替代方案”相关的问题,但没有什么帮助。这是我在 antlr3 中的 g 文件的一部分。

statement:
selection_stmt
| expression_stmt
| compound_stmt
| iteration_stmt
| return_stmt
;

selection_stmt:
IF OPENB expression CLOSB statement (ELSE statement)?
;

expression:
(var ASSIGN expression) => assignment
| simple_expression
;

我面临的问题是我收到了上面的短语 ELSE statement 的警告。

(200): Decision can match input such as "ELSE" using multiple alternatives: 1, 2 As a result, alternative(s) 2 were disabled for that input

有人可以向我解释这里发生了什么吗?谢谢。

附言当我将句法谓词用作 ((ELSE)=>ELSE statement)? 时,警告消失。我也不明白这是为什么。

最佳答案

Bhathiya wrote:

Can someone explain me what happens here? Thank you.

假设您的输入是:

if (A) if (B) return 1 else return 2

您的语法含糊不清:解析器不“知道”如何解释它。它可以通过两种方式实现(我添加了大括号以强调 else block 属于哪个 if):

1

if (A) 
{
if (B)
{
return 1
}
else
{
return 2
}
}

enter image description here

2

if (A)
{
if (B)
{
return 1
}
}
else
{
return 2
}

enter image description here

Bhathiya wrote:

P.S. When I use a syntactic predicate as ((ELSE)=>ELSE statement)?, warning disappears. I don't get the reason for this too.

通过在 ELSE 之前添加谓词,您强制解析器选择选项 #1(并且解析器不再发出警告,因为您明确告诉它选择备选方案 #1 #2)。结果与在那里放置谓词相同,但是 ANTLR 会警告您并提到它会忽略选项 #2 并且还会选择 #1(消息:“As结果,该输入禁用了备选方案 2")。

现在,标题中您的问题的答案,“如何删除警告‘多个选项’?”,将是使您的语法明确(或者只是将谓词留在那里,但要意识到永远不会有选项 #2 中所示的解析!)。您可以通过引入某种语句 block 定界符(如 {})来做到这一点。或者像 Python 那样做:通过缩进空格的数量来区分 ifelse 属于哪个。这是你的选择。

关于antlr - 如何删除 ANTLR3 警告 'multiple alternatives',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650645/

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