相关疑难解决方法(0)

一旦语法完成,走ANTLR v4树的最佳方法是什么?

目标

我正在开发一个为Coldfusion CFscript创建Varscoper的项目.基本上,这意味着检查源代码文件以确保开发人员正确地使用var他们的变量.

在使用ANTLR V4几天后,我有一个语法,在GUI视图中生成一个非常好的解析树.现在,使用该树,我需要一种方法来以编程方式在节点上爬行和寻找变量声明,并确保如果它们在函数内部,则它们具有适当的范围.如果可能的话,我宁愿不在语法文件中这样做,因为这需要将语言的定义与此特定任务混合.

我试过的

我最近的尝试是使用ParserRuleContext并尝试通过它的children通过getPayload().在检查了类之后,getPayLoad()我会有一个ParserRuleContext对象或一个Token对象.不幸的是,使用它我永远无法找到获取特定节点的实际规则类型的方法,只有它包含文本.每个节点的规则类型都是必需的,因为该文本节点是否是被忽略的右手表达式,变量赋值或函数声明都很重要.

问题

  1. 我是ANTLR的新手,这是正确的方法,还是有更好的方法来遍历树?

这是我的示例java代码:

Cfscript.java

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.Trees;

public class Cfscript {
    public static void main(String[] args) throws Exception {
        ANTLRInputStream input = new ANTLRFileStream(args[0]);
        CfscriptLexer lexer = new CfscriptLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        CfscriptParser parser = new CfscriptParser(tokens);
        parser.setBuildParseTree(true);
        ParserRuleContext tree = parser.component();
        tree.inspect(parser); // show in gui
        /*
            Recursively go though tree finding function declarations and …
Run Code Online (Sandbox Code Playgroud)

coldfusion antlr antlr4

32
推荐指数
1
解决办法
2万
查看次数

标签 统计

antlr ×1

antlr4 ×1

coldfusion ×1