[英]Nearley parser grammar for parsing opening and closing tags
假設我有一種簡單的語言來解析,它只是由字符串組成。 "this is a string"
string -> "\"" chars "\""
但是,該字符串可以在花括號內包含代碼。 為了簡單起見,我們假設code
只能是另一個字符串。 "this is a string with {"code"}"
code -> "{" string "}"
如何在 Nearley 中定義新字符串以包含code
定義? 我不斷得到大量結果,因為chars
可以匹配一個或多個字符。
string -> "\"" charCode "\""
charCode -> (chars | code) charCode
| (chars | code)
code -> "{" string "}"
chars -> char chars
| char
char -> [^{}]
理想情況下,我可以將類似"chars {"code"} chars chars {"code"} chars"
轉換為數組["chars ", "code", " chars chars ", "code", " chars"]
也許只能按照這個答案中的建議使用正則表達式和 moo 來做到這一點? (在這個例子中,開始和結束標簽不那么模棱兩可了,我沒有遇到同樣的問題。) [Nearley]:如何解析匹配的開始和結束標簽
當然,我會使用基於正則表達式的詞法分析器。 但是您可以嘗試編寫一個明確的語法,基於觀察到您永遠不能在charCode
中有兩個相鄰的chars
:
string -> "\"" charCodeStart chars:? "\""
charCodeStart ->
| charCodeStart chars:? code
另一種可能性,使用 EBNF:
string -> "\"" ( char:* code ):* char:* "\""
你可能不得不玩一點才能讓它正確。 我不怎么用nearley。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.