首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANTLR访问者是我使用的合适工具吗?

ANTLR访问者是我使用的合适工具吗?
EN

Stack Overflow用户
提问于 2016-02-11 13:53:15
回答 1查看 248关注 0票数 0

我使用的是ANTLR4,这里有一些上下文:

我的语法:

我使用的是可用的tsql语法。除了一些例外,我还对这个语法进行了一些扩展和修改。

我生成的java类

ANTLRWorks 2生成了tsql.tokenstsqlBaseVisitor.javatsqlParser.java等等。

我的"MyTsqlVisitor.java“

代码语言:javascript
运行
复制
import ...

public class MyTsqlVisitor extends tsqlBaseVisitor<String>{
    //here I need to implement my rules
}

我的主要方法

代码语言:javascript
运行
复制
public static void main(String[] args) {
    tsqlLexer lexer = null;
    
    try {
        lexer = new tsqlLexer(new ANTLRFileStream("test.iql"));
    } catch (Exception e) {}
    
    tsqlParser parser = new tsqlParser(new CommonTokenStream(lexer));
    
    ParseTree tree = parser.tsql_file();
    MyTsqlVisitor visitor = new MyTsqlVisitor();
    visitor.visit(tree);        
}

我的test.iql

代码语言:javascript
运行
复制
begin   
    declare var_etl_log_message varchar(2000);
    declare var_etl_proc_line int;

    exception
        when others then

        set var_etl_error_message = sqlstate || errormsg ();

        resignal;
end; 

我的问题

例如,我希望使用ANTLR获取var_etl_error_message的值,然后打印system.out.println(valueOfVar);

首先,ANTLR是我使用的正确工具吗?我读了很多关于ANTLR的东西,它看上去真的很好用。我确实用ANTLRWorks2生成了一个解析树,如果我可以将值或对象作为字符串获得,那么它是完美的。

如果是,我的猜测是对的,VisitorListener更适合我的使用吗?

如果是的话;-),那么我的工具就在正确的方向上,我想问你们,因为我在实现MyTsqlVisitor.java方面有困难。你们能告诉我推荐信之类的事吗。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 13:59:28

例如,我希望使用ANTLR获取var_etl_error_message的值,然后打印system.out.println(valueOfVar);

看来你得为这门语言开发一种或多或少的工作解释器。它可能不需要完全的功能,但是如果您想在执行之后获得结果,那么您必须以某种方式执行它(因此它将是某种解释器)。

是的,ANTLR是正确的工具,但它并不一定简单,特别是当您第一次处理语言实现时。访问者可能也是一个比听众更好的选择(我也会选择访问者)。IMO侦听器API仅适用于非常简单的使用(如prettyprinting或提取注释)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35341221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档