我需要使用antlr4访问者(目标语言JavaScript)构建一个嵌套数组。
解析器.g4:
function
: FUNCTION_NAME OPEN_ROUND_BRACKET (expression (COMMA expression)*)? CLOSE_ROUND_BRACKET
;
visitor.js:
visitFunction(ctx) {
console.log("visitFunction", ctx.getText());
return this.visitChildren(ctx);
}
我需要将函数语法规则的每个部分获取为字符串(例如 FUNCTION_NAME),但使用 ctx.getText() 我也获取每个子节点。如何从 ctx 中仅获取 FUNCTION_NAME 词法分析器部分字符串?
每个解析器规则或词法分析器规则都是上下文实例的方法。因此,在您的情况下,
function
解析器规则:
function
: FUNCTION_NAME OPEN_ROUND_BRACKET (expression (COMMA expression)*)? CLOSE_ROUND_BRACKET
;
// just an example of what an expression might look like
expression
: expression '*' expression
| NUMBER
;
可以这样使用:
// Let's say the parsed input is: "Q(42)"
visitFunction(ctx) {
console.log("FUNCTION_NAME: ", ctx.FUNCTION_NAME()); // Q
var expressionList = ctx.expression();
console.log("NUMBER: ", expressionList[0].NUMBER()); // 42
return this.visitChildren(ctx);
}