有没有办法告诉ANTLR4内联解析器规则?
具有这样的功能似乎是合理的。在阅读了有关ANTLR的书(“权威的ANTLR 4参考”)之后,我没有发现这种可能性,但是自从本书发行以来的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;
Run Code Online (Sandbox Code Playgroud)
标记为碎片的规则是为了清楚/文档化和可重用性,但是从语法的角度来看,它实际上var_decl是file或的实际直接元素,class_decl我希望将其反映在解析器创建的上下文的内容中。所有创建的中间上下文item,data_decl等等都是多余的,不必要采取空间,使它所以游客势必语法而不是其实际意义的组织结构。
综上所述-我希望ANTLR在生成解析器之前将上述语法转换为以下语法:
file: ( type_decl | const_decl | …Run Code Online (Sandbox Code Playgroud) antlr4 ×1