2015-02-09 48 views
2

我在想如何解析pegjs中的評論(比如la Haskell)。如何解析pegjs中的嵌套註釋?

目標:

{- 
    This is a comment and should parse. 
    Comments start with {- and end with -}. 
    If you've noticed, I still included {- and -} in the comment. 
    This means that comments should also nest 
    {- even {- to -} arbitrary -} levels 
    But they should be balanced 
-} 

例如,下列不應該解析:

{- I am an unbalanced -} comment -} 

但你也應該有一個逃生機制:

{- I can escape comment \{- characters like this \-} -} 

這八九不離十好像解析s表達式,但使用s表達式,很容易:

sExpression = "(" [^)]* ")" 

因爲密切的parens只是一個字符,我可以「不」與胡蘿蔔。另外,我想知道如何能夠「不」比pegjs中的單個字符更長的東西。

感謝您的幫助。

回答

3

這不處理你的逃逸機制,但它應該讓你開始(在這裏是一個鏈接到現場觀看:pegedit;只需點擊Build ParserParse在屏幕的頂部

start = comment 

comment = COMSTART (not_com/comment)* COMSTOP 

not_com = (!COMSTOP !COMSTART.) 

COMSTART = '{-' 

COMSTOP = '-}' 

要回答您的一般問題:

順便說一句,我不知道如何能及「不是」東西是長於pegjs單個字符

簡單的方法是(!rulename .)其中rulename是在您的語法中定義的另一個規則。 ! rulename部分只是確保接下來掃描的內容與rulename不匹配,但您仍然需要爲匹配的規則定義某些內容,這就是爲什麼我包含.的原因。

+1

酷!謝謝。這有很大幫助。我看到了!但我認爲這只是不起作用。我知道我明白我實際上必須包括一些東西來解析它。 – TheSeamau5 2015-02-15 03:30:55