如何使用antlr4更改上下文的文本

时间:2018-08-06 07:41:29

标签: antlr antlr4

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

示例:我在语法文件中定义了一个名为import { types, getParent, flow } from 'mobx-state-tree' const Search = types.model({ params: // your own params info results: types.array(types.reference(Article)) }).views(self => ({ get parent() { return getParent(self) // get root node to visit ArticleStore } })).actions(self => ({ search: flow(function*(params) { this.params = params // save query params const result = yield searchByQuery(query) // your query here this.parent.articleStore.saveArticles(result) // save result to ArticleStore this.results = getArticleIds(result) // extract ids here for references }) })) 的规则,然后我想在每次输入func时将规则name的文本更改为name name.getText + "some string",该怎么做?

目标
输入enterName
输出my name is peter

我可以通过在子节点上添加子节点来管理此问题吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是将从树中获取的文本与要添加到其中的文本连接起来。 示例:在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);
};