2014-02-21 36 views
1

我有我在Ragel中實現的詞法掃描器,當我識別各種類型的空白時,我需要使用一個標記。但除了分離其他令牌之外,我不關心空白。如果我把它傳遞給我的檸檬解析器,我將不得不插入許多額外的規則來擺脫它,這將使我的語法變得醜陋,並且減慢解析速度。但是我發現讓檸檬生成一個空白符號的唯一方法就是制定一個我從不打算使用的降低規則。如何讓檸檬在file.h中定義一個終端令牌,而不在任何約簡規則中使用該令牌?

目前,我有一個規則list0 ::= .允許一個空的列表,所以我加了一個list0 ::= SP.。是否沒有更簡潔的方式來聲明令牌,而不在減少規則中使用它?

+0

我不熟悉的檸檬具體,但如果您的掃描儀識別空白作爲標記,解析器可能希望爲好。也就是說,在解析器的輸入流中不能有空格標記,並且除非這些標記被語法使用,否則應該進行乾淨的解析。 –

+0

@ 500-InternalServerError:我有一個循環調用掃描器,接收一個標記,然後用標記調用解析器。在這個循環中很容易放棄白色空間令牌。但爲了另一個目的,查看空白區可能很有用,所以我不希望掃描儀完全忽略它。 –

回答

1

您可以使用%nonassoc,%right%left來保留終端令牌。

%nonassoc SECRET_TOKEN . 
program ::= . 

將產生:

#define SECRET_TOKEN 1 
相關問題