gpt4 book ai didi

antlr4 - ANTLR4 中是否有相当于 'fragment' 标记的解析器?

转载 作者:行者123 更新时间:2023-12-04 15:40:08 24 4
gpt4 key购买 nike

有没有办法告诉 ANTLR4 内联解析器规则?

拥有这样的功能似乎是合理的。在阅读了关于 ANTLR 的书(“The Definitive ANTLR 4 Reference”)之后,我还没有发现这种可能性,但可能已经在 4 年内引入了变化
既然书出版了,所以我想还是在这里问比较好。

考虑以下语法:

file: ( item | class_decl )*;
class_decl: 'class' class_name '{' type_decl* data_decl* code_decl* '}';
type_decl: 'typedef' ('bool'|'int'|'real') type_name;
const_decl: 'const' type_name const_name;
var_decl: 'var' type_name var_name;
...
fragment item: type_decl | data_decl | code_decl;
fragment data_decl: const_decl | var_decl;
fragment code_decl: function_decl | procedure_decl;
fragment class_name: ID;
fragment type_name: ID;
fragment const_name: ID;
fragment var_name: ID;

标记为片段的规则是为了清晰/文档和可重用性,但是从语法的角度来看,它是 f.e.真的是 var_decl这是 file 的实际直接元素或 class_decl我想让它反射(reflect)在解析器创建的上下文内容中。为 item 创建的所有中间上下文, data_decl等是多余的,不必要地占用空间并使其访问者被绑定(bind)到语法的组织结构而不是其实际含义。

总而言之 - 我希望 ANTLR 在生成解析器之前将上述语法转换为以下语法:
file: ( type_decl | const_decl | var_decl | function_decl | procedure_decl | class_decl )*;
class_decl: 'class' ID '{' type_decl* ( const_decl | var_decl )* ( function_decl | procedure_decl )* '}';
type_decl: 'typedef' ('bool'|'int'|'real') ID;
const_decl: 'const' ID ID;
var_decl: 'var' ID ID;
...

最佳答案

不,解析器规则中没有这样的东西。你可以在 ANTLRs Github repo 中针对这样的事情提出问题/RFE:https://github.com/antlr/antlr4/issues

关于antlr4 - ANTLR4 中是否有相当于 'fragment' 标记的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45191221/

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