我正在尝试使用ANTLR 4.0开发工具。我是ANTLR和Advance Java的新手。我下载了包antlr-4.2.2-complete.jar
。 ANTLER工作正常。
我几乎没有怀疑。
我拿了一个非常基本的语法,给出如下:
grammar test;
start : (aa) | (bb);
aa : A C D;
bb : A C B;
A : 'a';
B : 'b';
C : 'c';
D : 'd';
WS : [ \t\r\n] ->skip;
现在我正在使用命令提示符来解析其中的字符串..
C:\javalib\test>java org.antlr.v4.Tool test.g4
C:\javalib\test>javac test*.java
C:\javalib\test>java org.antlr.v4.runtime.misc.TestRig test start -gui -tree
**acb**
^Z
(start (bb a c b))
解析了字符串acb
,获得的输出为(start (bb a c b))
。
现在,我想知道如何解析ANTLR中的manystrings /文件。该文件中的每一行都有不同的启动规则。
例如,我们要解析的文件看起来像(输入文件)
start : acb
bb : acb
aa : acd
我不能接受相应更改语法的建议,这样我就可以获得一个可用于所有字符串的启动规则,因为我工作的语法非常广泛。< / strong>
我可以更改输入字符串的格式,以便我们可以在ANTLR中轻松解析它。我想提出基本的想法,我有很多字符串,每个字符串都有不同的启动规则,我如何在ANTLR中解析它。
答案 0 :(得分:1)
要使用给定规则解析每一行,您可以执行此操作。
testcase :
singletest
( Linebreak singletest) *
;
singletest:
'ruleA' ':' ruleA
| 'ruleB' ':' ruleB
|...
;
Whitespace: [ \t] -> skip; // no line break!
Linebreak: '\r\n' | '\r' | '\n';
答案 1 :(得分:0)
现在,我想知道如何解析ANTLR中的manystrings /文件。
要解析文件input.txt
,请执行:
testLexer lexer = new testLexer(new ANTLRFileStream("input.txt"));
testParser parser = new testParser(new CommonTokenStream(lexer));
ParseTree tree = parser.start();
System.out.println(tree.toStringTree());