相关疑难解决方法(0)

如何用ANTLR4创建AST?

我一直在寻找很多关于这一点,我找不到任何有用的,真正帮助我建立一个AST.我已经知道ANTLR4不像以前的ANTLR3那样构建AST.每个人都说:"嘿,使用访客!",但我找不到任何示例或更详细的解释如何我这样做...

我的语法必须像C一样,但每个命令都用葡萄牙语(portuga编程语言)编写.我可以使用ANTLR4轻松生成解析树.我的问题是:现在我需要做些什么才能创建AST?

顺便说一下,我正在使用Java和IntelliJ ......

EDIT1:我能得到的最接近的是使用本主题的答案:是否有一个使用antlr4从java源代码创建AST并提取方法,变量和注释的简单示例? 但它只打印访问过的方法的名称..

由于第一次尝试对我不起作用,我试图使用ANTLR3中的这个教程,但我无法弄清楚如何使用StringTamplate而不是ST ...

阅读本书The Definitive ANTLR 4 Reference我也找不到任何与AST有关的内容.

EDIT2:现在我有一个类来创建DOT文件,我只需要弄清楚如何正确使用访问者

java compiler-construction antlr abstract-syntax-tree antlr4

58
推荐指数
2
解决办法
3万
查看次数

了解Antlr4中的上下文数据结构

我试图在Antlr4的帮助下用Java编写代码转换器,并且到目前为止在语法部分取得了很大的成功.然而,现在我正在把我的脑袋撞到围绕解析树数据结构的墙上,我需要在解析输入后进行处理.

我正在尝试使用访问者模板来查看我的解析树.我将向您展示一个例子来说明我的困惑点.

我的语法:

grammar pqlc;

// Lexer

//Schlüsselwörter
EXISTS: 'exists';
REDUCE: 'reduce';
QUERY: 'query';
INT: 'int';
DOUBLE: 'double';
CONST: 'const';
STDVECTOR: 'std::vector';
STDMAP: 'std::map';
STDSET: 'std::set';
C_EXPR: 'c_expr';

INTEGER_LITERAL  : (DIGIT)+ ;
fragment DIGIT: '0'..'9';
DOUBLE_LITERAL : DIGIT '.' DIGIT+;

LPAREN          : '(';
RPAREN          : ')';
LBRACK          : '[';
RBRACK          : ']';
DOT             : '.';
EQUAL           : '==';
LE              : '<=';
GE              : '>=';
GT              : '>';
LT              : '<';
ADD             : '+';
MUL             : '*';
AND             : '&&';
COLON …
Run Code Online (Sandbox Code Playgroud)

java parsing visitor antlr4

5
推荐指数
1
解决办法
2137
查看次数