gpt4 book ai didi

antlr4 - 用于简单 C 表达式的大型解析树

转载 作者:行者123 更新时间:2023-12-05 03:14:28 24 4
gpt4 key购买 nike

我在这里使用 C 语法:https://github.com/antlr/grammars-v4/tree/master/c解析表达式 int a2 = 5;。 ANTLR 版本为 4.3。

这里的“5”匹配一个非常大的规则链:initializer->assignmentExpression->conditionalExpression->logicalOrExpression->logicalAndExpression->...大约还有 10 个 ->primaryExpression ->5

虽然最终解析是正确的,但这似乎是语法中的错误。有人可以建议修复或澄清吗?

Image of parse tree

最佳答案

不,这不是错误。树越低意味着运算符的优先级越高。

编辑

规则如此链接的事实可能是因为 Terence 根据 C11 规范编写了语法(它在语法注释中如此说明)。在官方规范中,规则可能是这样写的。但是,您可以以更紧凑的方式重写语法。 ANTLR4 允许直接递归规则,制定规则:

expr
: add
;

add
: mult (('+'|'-') mult)*
;

mult
: unary (('*'|'/') unary)*
;

unary
: '-' atom
| atom
;

atom
: '(' expr ')'
| NUMBER
;

等同于以下单个 (ANTLR4) 规则:

expr
: '-' expr
| expr ('*'|'/') expr // higher precedence than rules starting with `expr` defined below
| expr ('+'|'-') expr
| '(' expr ')'
| NUMBER
;

关于antlr4 - 用于简单 C 表达式的大型解析树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24486019/

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