本文介绍了ANTLR4-更改令牌文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下词法分析器规则:

TRUE : 'true' | 'TRUE' | '1';

我希望将所有TRUE令牌转换为‘true’。

我使用antlr4ts。我该怎么做?

推荐答案

这只能通过使用特定于目标的代码来完成。例如,在Java中,它将如下所示:

TRUE
 : ( 'true' | 'TRUE' | '1' ) {setText("true");}
 ;

并不是说1看起来可疑:如果您有一个规则与一个数字(或整数)匹配并且放在TRUE规则之前,则输入1永远不会被标记为TRUE令牌(请参阅:Why does the order of ANTLR4 tokens matter?)。

编辑

setText(...)是Java运行时中的词法分析器方法。如果我查看the antlr4ts code,看起来您只需设置public _text字段:

/** You can set the text for the current token to override what is in
 *  the input char buffer.  Set `text` or can set this instance var.
 */
public _text: string | undefined;

换句话说,试试这个:

TRUE
 : ( 'true' | 'TRUE' | '1' ) {this._text = "true";}
 ;

这篇关于ANTLR4-更改令牌文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 10:43