首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将AST操作翻译重写为ANTLR4

将AST操作翻译重写为ANTLR4
EN

Stack Overflow用户
提问于 2017-04-14 23:38:38
回答 1查看 201关注 0票数 1

我有一个用antlr2语法编写的语法文件,需要帮助我理解如何用antlr4语法重写一些解析器规则。我知道antlr4消除了构建AST的需求,所以我不知道如何处理、AST、动作翻译、等规则。抗Tree树构建解释了一些语法和如何使用#构造,但我仍然不确定如何读取这些规则并重写它们。

代码语言:javascript
复制
temp_root :   
    temp { #temp_root = #([ROOT, "root"], #temp_root); } EOF;

temp :
    c:temp_content 
        { #temp = #(#([FUNCTION_CALL, "template"], #template), c);
          reparent((MyAST)#temp, MyAST)#c); };

temp_content :
    (foo | bar);

foo :     
     {
         StringBuilder result = new StringBuilder("");
     }
    :   (c:FOO! { result.append(c.getText()); } )+
    { #foo = #([TEMPLATE_STRING_LITERAL, result.toString()], #foo); };

bar :
    BEGIN_BAR! expr END_BAR!
    exception 
        catch [Exception x] {
            bar_AST = handleException(x);
        };
EN

回答 1

Stack Overflow用户

发布于 2017-04-15 13:23:08

您无法操作生成的解析树(至少不使用语法代码),因此只需删除所有树重写内容(如果依赖于特定的树结构,则可能需要调整使用者代码)。还移除感叹号(表示不应该出现在AST中的令牌)。令人惊讶的是c:FOO部分。我不记得见过这个。但是从下面的操作代码来看,我想这是一个变量赋值,应该重写为c = FOO

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

https://stackoverflow.com/questions/43420575

复制
相关文章

相似问题

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