gpt4 book ai didi

antlr4 - Antlr 中的 token 别名

转载 作者:行者123 更新时间:2023-12-01 02:00:22 36 4
gpt4 key购买 nike

我有看起来像这样的规则:

INTEGER           : [0-9]+;
field3 : INTEGER COMMA INTEGER;

在解析树中,我得到一个名为 INTEGER 的列表,其中包含两个元素。

我宁愿为每个要命名的元素找到一种方法。

但如果我这样做:
INTEGER  : [0-9]+;
DOS : INTEGER;
UNO : INTEGER;
field3 : UNO COMMA DOS;

我仍然得到整数数组。

我做得对吗,我只需要深入挖掘以找出问题所在?

是否有某种语法将 INTEGER 别名为 UNO 仅用于此命令(这实际上是我更喜欢的)?

最佳答案

只需使用标签来识别子项:

field     : a=INTEGER COMMA b=INTEGER;
FieldContext将使用两个额外的类字段生成类:
TerminalNode a;
TerminalNode b;

对应的 INTEGER实例将分配给这些字段。因此,在大多数情况下实际上不需要混叠。

但是,可以有正当理由更改标记的命名类型,并且通常在词法分析器中通过使用模式、 Action 和谓词进行处理。例如,使用模式,如果 INTEGERUNO 之间交替和 DOS类型:
lexer grammar UD ;

UNO : INT -> mode(two);

mode two;
DOS : INT -> mode(default);

fragment INT : [0-9]+ ;

何时进行模式切换以及不同的特定方法是否更合适将取决于尚未提供的详细信息。

关于antlr4 - Antlr 中的 token 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105912/

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