2013-05-01 19 views
1

我試圖在Javacc中創建一個語法,對於函數名稱,我可以使用任何類型的低字符字母或'main'。如果'main'是函數名稱,則需要採取不同的過程。在Javacc中排除字符串作爲標記

我的問題是,當main被包含作爲選擇,並且被匹配時,main不能被匹配成字符串。所以我希望如果我從令牌中排除'main'這個詞,那麼它可能會起作用!

< FUNCNAME: (["a"-"z"])+ ~["main"]> 

回答

2

最簡單的做法是讓「main」成爲另一個標記。

TOKEN: { <MAIN: "main" > } 
TOKEN: { <FUNCNAME: (["a"-"z"])+ > } 

兩個規則的前綴匹配「主」,但第一個勝利,因爲這是第一次。請注意,「維護」仍然是最大蒙克規則的FUNCNAME。請參閱JavaCC FAQ中的FAQ 3.3。