gpt4 book ai didi

antlr - 如何摆脱我的 ANTLR3 语法中的以下多个替代警告?

转载 作者:行者123 更新时间:2023-12-01 13:32:13 26 4
gpt4 key购买 nike

[11:45:19] warning(200): mygrammar.g:14:57: Decision can match input such as "','" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
[11:45:19] warning(200): C:\Users\Jarrod Roberson\mygrammar.g:14:57: Decision can match input such as "','" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input

我希望能够将函数嵌套在其他函数中。

myfunction(x) ->
sqr(a) -> a * a,
y -> sqr(x).

这是它提示的行

function : ID '(' args ')' '->' statement (',' statement)* ;

这是它正在考虑的替代方案

statement : ATOM
| expression
| assignment
| function
;

我正在使用 . 作为我的语句结束规则

program : (statement'.')*;

这是 ANTLRWorks 中的 synatx 图的样子

syntax diagram
(来源:vertigrated.com)

我真的很喜欢在没有任何警告的情况下编译/工作。如何解决此警告情况?

最佳答案

Jarrod Roberson wrote:

I really like things to compile/work without any warnings. How do I resolve this warning condition?

您的解析器可以解析以下输入:

f(x)-> g(y)-> y*y, x=y

在两个不同的解析树中:

enter image description here

和:

enter image description here

您可以通过强制解析器向前看并确保在实际匹配这些规则之前有 ',' 语句 来解决这个问题。您可以通过使用句法谓词((...)=> 部分)来做到这一点,其中包含上述规则:

function
: ID '(' args ')' '->' statement ((',' statement)=> ',' statement)*
;

但是,如果您的 function 规则具有某种您尚未定义的“结束”标记,则您不需要谓词。根据您之前的问题和您的示例:

myfunction(x) ->
sqr(a) -> a * a,
y = sqr(x).

您似乎正在使用 '.' 作为 function 的结尾。如果您将其添加到您的 function 规则中:

function
: ID '(' args ')' '->' statement (',' statement)* '.'
;

您根本不需要谓词。

关于antlr - 如何摆脱我的 ANTLR3 语法中的以下多个替代警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125141/

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