[英]ANTLR recursive syntax matching
我有以下語法
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
第2個符合預期,但第一個不符合。
在第一個腳本中,第二個內部組在父組下不匹配。
相反,它與以下statement
匹配
我在這里想念什么?
第一組之后,它缺少一個“終點”。 第二組是嵌套的,但是根據規則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
;
然后它應該正確解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.