簡體   English   中英

用於解析開始和結束標簽的 Nearley 解析器語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM