用Antlr解析歧义输入

用Antlr解析歧义输入,antlr,antlr3,ambiguity,Antlr,Antlr3,Ambiguity,几天来,我一直在尝试解析一些由文本和数字组成的文本(我在语法中称之为句子) 我有一个规则,需要解析以INT结尾的句子 sentence_with_int : sentence INT; 所以,如果我有一些输入是“购买的14码鞋的数量是3”,那么句子_和_int将是匹配的,而不仅仅是句子。我相信有更好的方法可以做到这一点,但我只是在学习这个工具 谢谢你,Richard你的语法: 确实如此。这里有一个小测试线束: import org.antlr.runtime.*;

几天来,我一直在尝试解析一些由文本和数字组成的文本(我在语法中称之为句子)

我有一个规则,需要解析以INT结尾的句子

    sentence_with_int 
        : sentence INT;
所以,如果我有一些输入是“购买的14码鞋的数量是3”,那么句子_和_int将是匹配的,而不仅仅是句子。我相信有更好的方法可以做到这一点,但我只是在学习这个工具

谢谢你,Richard你的语法:



确实如此。这里有一个小测试线束:

import org.antlr.runtime.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        ANTLRStringStream in = new ANTLRStringStream("the number of size 14 shoes bought was 3");
        TestLexer lexer = new TestLexer(in);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        TestParser parser = new TestParser(tokens);
        parser.sentence_with_int();
    }
}
首先生成一个解析器和lexer(假设您的所有文件和ANTLR jar都在同一个目录中):

最后运行
演示
类:

java -cp .:antlr-3.2.jar Demo
没问题@Richard,虽然我做的不多:你的语法一开始就很好!:)
import org.antlr.runtime.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        ANTLRStringStream in = new ANTLRStringStream("the number of size 14 shoes bought was 3");
        TestLexer lexer = new TestLexer(in);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        TestParser parser = new TestParser(tokens);
        parser.sentence_with_int();
    }
}
java -cp antlr-3.2.jar org.antlr.Tool Test.g javac -cp antlr-3.2.jar *.java java -cp .:antlr-3.2.jar Demo Parsed: sentence='the number of size 14 shoes bought was' Parsed: int='3'