ANTLR递归语法匹配
我有以下语法ANTLR递归语法匹配,antlr,antlr4,Antlr,Antlr4,我有以下语法 grammar Group; script: statementList; statementList: (statement NEWLINE+)*; statement: titleStatement | groupStatement; titleStatement : 'hello_world' WS+ ':' WS+ IDENTIFIER; groupStatement :groupDefStatement (messag
grammar Group;
script: statementList;
statementList: (statement NEWLINE+)*;
statement: titleStatement | groupStatement;
titleStatement
: 'hello_world' WS+ ':' WS+ IDENTIFIER;
groupStatement
:groupDefStatement
(messageFlowStatementList | groupStatement)
END
;
messageFlowStatementList: (messageFlowStatement NEWLINE+)*;
messageFlowStatement: processingStatement;
groupDefStatement : GROUP WS+ (NAME WS* EQ_SYMBOL WS* STRINGX WS* COMMA_SYMBOL WS*)?
PATH WS* EQ_SYMBOL WS* STRINGX WS*
(COMMA_SYMBOL WS* METHOD WS* EQ_SYMBOL WS* STRINGX WS*)? NEWLINE+;
processingStatement: PROCESS_MESSAGE LPAREN STRINGX COMMA_SYMBOL STRINGX RPAREN;
要匹配以下脚本,请执行以下操作:
hello_world : abc
group name="group", path="hello", method="POST"
group name="group", path="hello", method="POST"
process_message("aaa","bbb")
end
group name="group", path="hello", method="POST"
process_message("aaa","bbb")
end
end
或
hello_world : abc
group name="group", path="hello", method="POST"
process_message("aaa","bbb")
end
第二个与预期匹配,但第一个不匹配
在第一个脚本中,父组下的第二个内部组不匹配
相反,它与语句匹配
我在这里遗漏了什么?在第一组之后遗漏了一个“结尾”。第二个组是嵌套的,但根据规则groupStatement
,它们都需要一个结尾。正确的输入应该是:
hello_world : abc
group name="group", path="hello", method="POST"
group name="group", path="hello", method="POST"
process_message("aaa","bbb")
end
end
group name="group", path="hello", method="POST"
process_message("aaa","bbb")
end
end
如果希望原始输入正确,可以将groupStatement
规则更改为:
groupStatement
: groupDefStatement messageFlowStatementList END
| groupDefStatement groupStatement
;
然后它应该正确解析