Tag: lexer

ANTLR:Unicode字符扫描

问题:无法正确打印Unicode字符。 这是我的语法: options { k=1; filter=true; // Allow any char but \uFFFF (16 bit -1) charVocabulary=’\u0000′..’\uFFFE’; } ANYCHAR :’$’ | ‘_’ { System.out.println(“Found underscore: “+getText()); } | ‘a’..’z’ { System.out.println(“Found alpha: “+getText()); } | ‘\u0080′..’\ufffe’ { System.out.println(“Found unicode: “+getText()); } ; 调用词法分析器的main方法的代码片段: public static void main(String[] args) { SimpleLexer simpleLexer = new SimpleLexer(System.in); while(true) { […]

使用javax.lang.model或ANTLR JavaParser获取Java源代码信息的示例/教程

我想为简单的Java Logic创建一个类似流程图的自动化可视化,为此我需要解析Java源代码,我有2个候选者,Java 6的ANTLR和javax.lang.model 。两者都不容易。 我还没有找到一个可以远离我想要实现的工作示例。 我想找到简单的变量声明,赋值和流(if,for,switch,boolean conditions等) 这些中的任何一个都有简单的示例或教程吗? 我发现很少有ANTLR示例(其中没有一个是开箱即用的,没有重要的“家庭作业”),绝对没有javax.lang.model

如何获取antlr解析的错误消息?

我用antlr 4.4编写了一个语法,如下所示: grammar CSV; file : row+ EOF ; row : value (Comma value)* (LineBreak | EOF) ; value : SimpleValueA | QuotedValue ; Comma : ‘,’ ; LineBreak : ‘\r’? ‘\n’ | ‘\r’ ; SimpleValue : ~(‘,’ | ‘\r’ | ‘\n’ | ‘”‘)+ ; QuotedValue : ‘”‘ (‘””‘ | ~'”‘)* ‘”‘ ; 然后我使用antlr 4.4生成解析器和词法分析器,这个过程是成功的 […]

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 […]