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:
我有一组关键字(如 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: