gpt4 book ai didi

c - 使用 c 语法构建 ast 时管理操作优先级

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:14 27 4
gpt4 key购买 nike

我正在尝试用我的 C 语法构建一个 AST,可以找到 here .但是它不考虑操作的优先级,例如当我输入此代码时:

 l = k*j*5 - 10;

我明白了:

AST

操作由这段代码管理:

multiplicative_expression
: primary_expression (('*'^ additive_expression) | ('/'^ additive_expression) | ('%'^ additive_expression) )*
;

additive_expression
: multiplicative_expression (('+'^ multiplicative_expression) | ('-'^ multiplicative_expression))*
;

请问有解决办法吗?

另一个问题,有没有办法在构建 AST 时添加一个特殊的标记?例如这样的事情:

A B C -> ^( "VAR" B C)

VAR 是只能通过 AST 才能看到的新 token 。

是否可以通过其他方式重命名“nil”标记?

最佳答案

我绝不是 ANTLR 方面的专家,但这不应该满足您的需求吗?

multiplicative_expression
: primary_expression (('*'^|'/'^|'%'^) multiplicative_expression)*
;

additive_expression
: multiplicative_expression (('+'^|'-'^) multiplicative_expression)*
;

编辑:很高兴它对你有用。对于 Daniel Fischer 关于关联性的观点,想到的解决方案是

multiplicative_expression
: primary_expression |
(multiplicative_expression ('*'^|'/'^|'%'^) primary_expression)
;

additive_expression
: multiplicative_expression |
(additive_expression ('+'^|'-'^) multiplicative_expression)
;

但是,我似乎记得读过 ANTLR 曾一度无法处理这样的左递归。如果它不起作用,请告诉我。

关于c - 使用 c 语法构建 ast 时管理操作优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312053/

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