2008-11-21 83 views
2

我必須定義文件的語法,如下所示。如何在ANTLR中指定令牌的確切出現次數?

//示例文件
NameCount = 4
名稱=一個
名稱= B
名稱= C
名稱= d
//文件結束

現在我能定義令牌NameCount名稱。但是我必須定義文件結構,包括令牌的有效數量名稱,這是NameCount之後的值。我有解析的值並將其轉換爲整數並存儲在全局語法範圍的變量中(例如,在變量nc中)。

如何在語法中定義那個名稱應該重複一下nc次?

回答

6

這不能在語法本身表達。如果數量已修復,則可以表示預期令牌的數量。但令牌流根據值而變化。你可以做的是將這個包含到詞法分析器/解析器組合中。但是你不能通過簡單的語法語法來創建這個結構。你可能想沿

grammar test; 

@members { 
    private int count = 0; 
    private int names = 0; 
} 

file 
    : count (name)+ 
     { 
     if (count != names) throw new Exception(""); 
     } 
    ; 

count 
    : 'NameCount' EQ Number 
     { 
     count = Integer.parseInt($Number.text); 
     } 
    ; 

name 
    : 'Name' EQ Value 
     { 
     names++; 
     } 
... 
東西線
1

我不知道這是一個上下文無關文法。如果不是,你不能告訴ANTLR解析語言。