0

我对 ANTLR 相当陌生,并且对 ANTLR 用于验证输入有一些基本的了解。但是有些我无法满足我的要求。我的要求基本上是验证完整字符串的一部分。我的输入将分为 4 个部分,标题、学生数据、学校数据、页脚。样本数据将是

标题,MYDATA 学生,姓名,ROLLNO 学校,姓名,地址学生,姓名,ROLLNO 学校,姓名,地址页脚

HEADER,SCHOOL,STUDENT 将是不同的代币

语法文件很常见。每个部分都将通过不同的过程。例如,我如何验证仅基于 ANTLR 语法的标题详细信息等仅验证学生、学校和页脚的详细信息?

如果我只通过 ANTLRStringStream 将部分数据(示例标题数据)作为输入传递,它会因 NoViableException 而失败。

4

1 回答 1

1

如果在您的语法中,您有单独的规则来单独验证每个部分,例如

completeData: header studentData schoolData footer;

/* Rule for matching header part */
header: something something;
/* and so on for other sections */

您可以调用这些规则,而不是调用完整数据的规则。而且您需要提供适当的部分输入(例如标题部分)。

代码将类似于。

try {
    MyLexer lexer = new MyLexer (new ANTLRStringStream (myInputString));
    CommonTokenStream tokens = new CommonTokenStream (lexer);
    MyParser parser = new MyParser (tokens);

    parser.header ();
} catch (Exception ex) {
    ex.printStackTrace ();
}
于 2013-08-07T18:25:59.070 回答