Antlr 语法无法提供所需的 AST

Antlr Grammar not able to give required AST

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

例如:

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

我的语法:

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

AST 包含 AST output

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

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

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

我的语法跳过了所有空格和行尾字符。 请提出建议。

不完全清楚你想要达到什么目的,但是下面的语法...

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

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

WS : [ \t]+ -> skip ;

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