如何从访问者中的ctx获取词法分析器规则?

问题描述 投票:0回答:1

我需要使用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 词法分析器部分字符串?

antlr antlr4
1个回答
0
投票

每个解析器规则或词法分析器规则都是上下文实例的方法。因此,在您的情况下,

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.