首页 > 解决方案 > 如何使用 antlr4 更改上下文的文本

问题描述

输入规则时如何更改规则的文本?

示例:我在语法文件中定义了一个规则name,然后我想将规则的文本更改namename.getText + "some string"每次输入 func enterName,该怎么做?

目标
输入my name is peter
输出my name is peterAAAAAAA

我可以通过向节点添加子节点来管理它吗?

标签: antlrantlr4

解决方案


最简单的方法是将您从树中获得的文本与您要添加到其中的文本连接起来。示例:在 javascript 中;

Listener.prototype.exitSetVar = function (ctx) 
{
var a= ctx.getText();
var b= "any_string";
var x= a+b;
this.stack.push(x);
};

或者,您甚至可以从 antlr 函数为特定规则生成的树中获取特定节点。ctx.ID(); 或 ctx.STRING(); 或 ctx.INT(); 等等。取决于您对语法中特定规则的标记。例子:

Listener.prototype.exitSetVar = function (ctx) 
{
var a= ctx.TOKEN_NAME();
var b= "any_string";
var x= a+b;
this.stack.push(x);
};

推荐阅读