我必須定義文件的語法,如下所示。如何在ANTLR中指定令牌的確切出現次數?
//示例文件
NameCount = 4
名稱=一個
名稱= B
名稱= C
名稱= d
//文件結束
現在我能定義令牌NameCount和名稱。但是我必須定義文件結構,包括令牌的有效數量名稱,這是NameCount之後的值。我有解析的值並將其轉換爲整數並存儲在全局語法範圍的變量中(例如,在變量nc中)。
如何在語法中定義那個名稱應該重複一下nc次?
我必須定義文件的語法,如下所示。如何在ANTLR中指定令牌的確切出現次數?
//示例文件
NameCount = 4
名稱=一個
名稱= B
名稱= C
名稱= d
//文件結束
現在我能定義令牌NameCount和名稱。但是我必須定義文件結構,包括令牌的有效數量名稱,這是NameCount之後的值。我有解析的值並將其轉換爲整數並存儲在全局語法範圍的變量中(例如,在變量nc中)。
如何在語法中定義那個名稱應該重複一下nc次?
這不能在語法本身表達。如果數量已修復,則可以表示預期令牌的數量。但令牌流根據值而變化。你可以做的是將這個包含到詞法分析器/解析器組合中。但是你不能通過簡單的語法語法來創建這個結構。你可能想沿
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++;
}
...
東西線
我不知道這是一個上下文無關文法。如果不是,你不能告訴ANTLR解析語言。