2011-09-26 77 views
4

定義語言解析器的語法時,如何處理文本中可能出現處的註釋(例如/ * .... * /)?如何使用EBNF語法解析註釋

從標籤內的標籤構建語法似乎在事物結構化時很有效,但評論似乎會拋出一切。

你只需要分兩步解析文本?首先刪除這些項目,然後挑選代碼的實際結構?

由於

回答

1

一種方法是使用單獨的詞法分析器。另一種更靈活的方法是使用隱含的空白前綴修改所有類似令牌的條目(關鍵字,詞彙元素等),對當前上下文有效。這是大多數現代Packrat解析器處理空白的方式。

+0

我無法解析您的推薦:-)。在諸如'hash =「#」;的EBNF令牌規則中,如何修改以包含「隱式空白前綴」?隱式通常意味着從某事物推斷出來,而顯式意味着該規則被改變爲指定前綴,例如'hash = [WS]「#」;'。一個小小的語法例子會有所幫助。 – Dave

+0

@Dave,我使用的規則(不一定是最好的,可以隨意嘗試)是爲任何令牌節點添加一個空格,例如,對於你的'hash =「#」'這個轉換會產生'hash = [whitespace] *「#」',對於所有可能從PEG表達式隱式提升的令牌節點(例如,如果您有表達式'atom = {「(」[expr]「))}/.. .',你將有兩個隱式的令牌節點'「(」'和'「)」',並且兩者都加上空格。你可以在這裏看到我的實現細節:https://github.com/combinatorylogic/mbase/斑點/主/ SRC /升/ LIB /解析/ compiler.al –

4

通常,評論由主語法的範圍之外詞法分析器處理。實際上,他們(通常)被視爲空白。

+0

這很有道理。謝謝。 – Jagu