Antlr语法无法提供所需的AST

时间:2019-05-17 05:09:31

标签: java antlr grammar

我有一组关键字(如IF,FOR等),所有这些关键字均使用常规编程语言。每个语句以“;”结尾。 我面临的问题是我无法为打印语句编写语法。 每个打印语句以“:”开头。我已经跳过了所有行尾字符和空格。 如果我有连续的打印语句,我将面临挑战。

例如:

:$name This is first line 
:This is second line

我的语法:

stmt : printStmt+
   printStmt: ':' printlite;
   printlite : (anychar|('$' identifier))+;
   anychar: ~(allKeywords) ;

AST包含                  AST output

我尝试在任何char,printlite,printstmt的末尾添加EOL,但似乎没有任何效果。预期的输出是2个printStmt节点。我跳过了所有的'\ r \ n'。

为了更好地理解,这是我要解析的部分:

FUNCTION xyz(STRING searchStr)
{   
    :Error while reading a file $name
    abc();
} 

我的语法中所有空白和行尾字符都被跳过。 请提出建议。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您要实现的目标,但是下面的语法...

main : statement+;
statement: ':' (identifier|other_words)+ CR*;
identifier : '$' IDENTIFIER;
other_words : ~(CR)+ ;

IDENTIFIER : [A-Za-z]+ ;
CR : '\r'? '\n' ;

WS : [ \t]+ -> skip ;

...使用示例输入生成以下AST:

AST for example text