Tag: antlr

在Eclipse Luna上设置ANTLR 4 IDE的麻烦(4.4)

我正在尝试在Eclipse Luna(4.4)上安装ANTLR 4 IDE 。 我已经从Marketplace安装了它,但我不知道如何创建一个包含ANTLR 4 Lexer / Parser的项目。 当我去创建一个新项目时,我没有看到ANTLR 4的任何选项。我尝试创建一个.g4文件,它在编辑器中打开,但是当我保存它没有做任何事情。

ANTLR的Java Tree解析器输出

我在ANTLR网站上找到了一个样本模板,它的Javatreeparser.g,该网站说它可以生成我需要的AST,但由于我是ANTLR的新手,我该如何让它显示? 到目前为止我所做的是将语法文件与我现有的java语法放在一起。 但我不知道如何使用和输出我需要的文件AST。 我该怎么做?

ANTLR:从CommonTree到有用的对象图

我今天开始使用ANTLR,我已经创建了一个基本的解析器。 解析后,我最终得到了一棵树。 对我来说,似乎这只是一堆String在树节点的树结构中放在一起。 这对我来说不是很有用。 我想要一个对象图。 澄清(这是一个例子,而不是我的真实应用):对于”5-1+6″我似乎最终得到: new String(“PLUS”) new String(“MINUS”) new String(“5”) new String(“1”) new String(“6”) 我会发现更有用的东西: new Plus( new Minus( new IntegerLiteral(5), new IntegerLiteral(1)), new IntegerLiteral(6)) 从第一个表示到另一个表示最方便的方法是什么? 在本文中 ,作者做了类似的事情: public Expression createExpr(CommonTree ast) { // … switch (ast.getType()) { case SimpleExpressionParser.INT: return new IntegerLiteral(ast.getText()) case SimpleExpressionParser.PLUS: return new Plus(createExpr((CommonTree)ast.getChild(0)), // recurse createExpr((CommonTree)ast.getChild(1))); // recurse […]

ANTLR4访问者模式简单的算术例子

我是一个完整的ANTLR4新手,所以请原谅我的无知。 我遇到了这个演示文稿 ,其中定义了一个非常简单的算术表达式语法。 看起来像: grammar Expressions; start : expr ; expr : left=expr op=(‘*’|’/’) right=expr #opExpr | left=expr op=(‘+’|’-‘) right=expr #opExpr | atom=INT #atomExpr ; INT : (‘0’..’9′)+ ; WS : [ \t\r\n]+ -> skip ; 这很好,因为它会生成一个非常简单的二叉树,可以使用访问者模式遍历,如幻灯片中所述,例如,这是访问expr的函数: public Integer visitOpExpr(OpExprContext ctx) { int left = visit(ctx.left); int right = visit(ctx.right); String op = ctx.op.getText(); switch […]

扩展简单的ANTLR语法以支持输入变量

我仍然在寻找一种非常简单的语言 ,现在我知道没有。 所以我自己用ANTLR3写一个。 我在这个答案中找到了一个很好的例子: Exp.g: grammar Exp; eval returns [double value] : exp=additionExp {$value = $exp.value;} ; additionExp returns [double value] : m1=multiplyExp {$value = $m1.value;} ( ‘+’ m2=multiplyExp {$value += $m2.value;} | ‘-‘ m2=multiplyExp {$value -= $m2.value;} )* ; multiplyExp returns [double value] : a1=atomExp {$value = $a1.value;} ( ‘*’ a2=atomExp {$value *= $a2.value;} […]

哪个面向Java的lexer解析器用于简单项目(ANTLR,DIY等)

我正在开发一个小型文本编辑器项目,并希望为几种语言添加基本语法高亮(Java,XML ……仅举几例)。 作为一种学习经历,我想添加一个流行或非流行的Java词法分析器。 你推荐什么项目。 Antlr可能是最知名的,但它似乎相当复杂和沉重。 以下是我所知道的选项。 ANTLR Ragel(是的,它可以生成用于处理输入的Java源代码) 自己动手(我想我可以编写一个简单的令牌解析器并突出显示源代码)。

Eclipse中的Antlr IDE不起作用

我正在使用Antlr v3和java作为项目,并且在AntlrWorks中一切顺利,但是当我切换到eclipse的插件Antlr IDE时,解释器无法匹配我写的句子,告诉我不匹配。 在我看来,它无法识别我在lexer中指定的要跳过的单词列表。 然而,在AntlrWorks中完美运行也是如此。 有什么建议么? 我在eclipse中设置了antlr buider:Antlr Parser Generator v3.4

允许空白部分ANTLR4

我有一个antlr4语法,专门用于嵌入到文本模板中的特定于域的语言。 有两种模式: 文本(应保留空格) 代码(应忽略空格) 示例语法部分: template : ‘{‘ templateBody ‘}’ ; templateBody : templateChunk* ; templateChunk : code # codeChunk // dsl code, ignore whitespace | text # textChunk // any text, preserve whitespace ; code规则可能包含对template规则的嵌套引用。 因此解析器必须支持嵌套空白/非空白部分。 也许lexer模式可以帮助 – 有一些缺点: 必须在另一个编译器传递中解析代码段 我怀疑嵌套部分是否可以正确映射 然而,最有希望的方法似乎是操纵隐藏的渠道 。 我的问题:是否有最佳实践来满足这些要求? 是否有一个示例语法,已经解决了类似的问题? 附录: 其余的语法可能如下所示: code : ‘@’ function ; function : […]