gpt4 book ai didi

c# - 无法让 Antlr4 解析器遵循隐式乘法的操作顺序

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:09 25 4
gpt4 key购买 nike

我是 ANTLR 的新手,我正在尝试使用 ANTLR4 和 C# 为计算器应用程序生成一个相对简单的解析器。这是我的语法文件。

parser grammar CalculatorExpressionParser;

options{
language = CSharp2;
}

expr: FUNC expr? (COMMA expr)* RIGHTPAREN #CallFunction
| LEFTPAREN expr RIGHTPAREN #Parens
| expr POW<assoc=right> expr #Pow
| expr op=(MULTIPLY | DIVIDE)? expr #MultDivide
| expr op=(ADD | SUBTRACT) expr #AddSubtract
| SUBTRACT expr #Negative
| NUMBER #Number
;

我编写了一个自定义词法分析器来生成标记,以便在解析之前支持变量的隐式乘法和转换为其等效数值。

但在输入后我得到以下结果。

2+6/3 => 4 (correct)
6/3+2 => 1.2 (should be 4)
6/(3+2) => 4 (also correct)

1+2*3 => 7 (correct)
2*3+1 => 8 (should be 7 too)
(2*3)+1 => 7 (correct)

请注意,我尝试关闭错误恢复功能并将其设置为报告所有歧义错误,但我似乎没有收到任何错误。

无论如何,如果我通过删除 ?在除法/乘法运算符之后,它似乎工作得很好,除了不再支持隐式乘法。

parser grammar CalculatorExpressionParser;

options{
language = CSharp2;
}

expr: FUNC expr? (COMMA expr)* RIGHTPAREN #CallFunction
| LEFTPAREN expr RIGHTPAREN #Parens
| expr POW<assoc=right> expr #Pow
| expr op=(MULTIPLY | DIVIDE) expr #MultDivide
| expr op=(ADD | SUBTRACT) expr #AddSubtract
| SUBTRACT expr #Negative
| NUMBER #Number
;

我想知道为什么要把 ?打破匹配顺序?有没有简单的方法来解决这个问题?

最佳答案

“expr expr”不符合运算符的模式,尽管 ANTLR 4.2 可能会处理这个问题。 Sam 仍在致力于更新 C# 目标。

关于c# - 无法让 Antlr4 解析器遵循隐式乘法的操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21741045/

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