我有.java文件中的解析器和ANTLR3的词法分析器的Java源代码,并希望看到所有规则等实际的语法背后。
这有可能吗?
发布于 2013-01-26 06:31:50
而不是通过一些自动化工具(AFAIK)。但是生成的源文件在其注释中包含原始语法的解析器和词法分析器规则,因此您可以很容易地对它们进行逆向工程。
例如,以这个虚拟语法为例:
grammar T;
parse
: foo
| bar
| OTHER
;
foo : INT ;
bar : ALPHA ;
INT : '0'..'9'+ ;
ALPHA : ('a'..'z' | 'A'..'Z')+ ;
OTHER : . ;如果从它生成一个词法分析器和解析器,解析器将如下所示:
public class TParser extends Parser {
// $ANTLR start "parse"
// T.g:3:1: parse : ( foo | bar | OTHER );
public final void parse() throws RecognitionException {
...
}
// $ANTLR end "parse"
// $ANTLR start "foo"
// T.g:9:1: foo : INT ;
public final void foo() throws RecognitionException {
...
}
// $ANTLR end "foo"
// $ANTLR start "bar"
// T.g:10:1: bar : ALPHA ;
public final void bar() throws RecognitionException {
...
}
// $ANTLR end "bar"
}lexer如下所示:
public class TLexer extends Lexer {
// $ANTLR start "INT"
public final void mINT() throws RecognitionException {
// T.g:12:7: ( ( '0' .. '9' )+ )
...
}
// $ANTLR end "INT"
// $ANTLR start "ALPHA"
public final void mALPHA() throws RecognitionException {
// T.g:13:7: ( ( 'a' .. 'z' | 'A' .. 'Z' )+ )
...
}
// $ANTLR end "ALPHA"
// $ANTLR start "OTHER"
public final void mOTHER() throws RecognitionException {
// T.g:14:7: ( . )
...
}
// $ANTLR end "OTHER"
}如您所见,所有语法规则都包含在.java源文件的注释中。
https://stackoverflow.com/questions/14531230
复制相似问题