输入规则时如何更改规则文本?
示例:我在语法文件中定义了一个名为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
我可以通过在子节点上添加子节点来管理此问题吗?
答案 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);
};