2013-11-04 110 views
0

在我的語法中,我有一個賦值規則。它是形式 assignment: VAR_TYPE ID '=' expr;ANTLR匹配等級名稱

VAR_TYPE我有一些硬編碼值喜歡整數,字符串等

我想知道的是我怎麼能匹配在文件中聲明的任何類的名字嗎?

假設有人宣稱class FooClass Bar。如何在不利用ID的情況下將此標記爲有效輸入 。因爲如果我的廣告|IDVAR_TYPE規則,ID永遠不會是 匹配,我不希望這樣。

+1

爲什麼不使用'ID'而不是'VAR_TYPE'來開始?然後,你可以維護一個可擴展容器(這是特定於語言的;使用['std :: vector'](http://www.cplusplus.com/reference/vector/vector/)與C++,['list'] (http://docs.python.org/2/library/stdtypes.html#mutable-sequence-types)與Python,['System.Collecions.Generic.List'](http://msdn.microsoft.com/ en-us/library/6sh2ey19.aspx)與C#)聲明類型並使用它來保持跟蹤,如果使用未知類型則會引發錯誤。 – refi64

+0

好的。所以你的建議是放棄VAR_TYPE? – coredump

+0

非常。這就是我通常所做的,以避免過度複雜的事情。你使用什麼語言? – refi64

回答

1

您不應該硬編碼您的類型名稱,除非它們實際上是您的語言中的關鍵字。然後創建一個解析器規則匹配任何類型:

varType : ID; 
assignment : varType ID '=' expr; 

IntegerString隨後將作爲常規ID令牌進行處理。

解析完成後使用偵聽器來驗證出現在每個varType中的ID實際上是否指向某個類型。