2014-12-13 61 views
1

我嘗試了ANTLR 4,這讓我很簡單Hello語法書中<以下輸出權威ANTLR 4參考>:在ANTLR 4中<EOF>的位置有點奇怪嗎?

[@2,12:11='<EOF>',<-1>,2:0] 

按照書上的解釋,12:11符號表示<EOF>令牌從位置12開始並在11結束。這怎麼可能?

PS。我正在使用Windows。

+0

也許用UTF-16編碼測量它的字節數? – Mephy 2014-12-13 16:28:53

回答

2

在ANTLR 4中,兩個端點都包含在內。與包括端點的跨度的長度如下:

長度=結束 - 開始+ 1

的EOF符號的長度爲0(它出現在已知的位置,但它包含沒有輸入符號)。如果輸入是長12個字符,則得到此公式的結束位置:

0 =完 - 12 + 1

因此:

完= 0 + 12 - 1 = 11

+0

謝謝。所以我試圖理解這背後的動機。我猜*是是特殊的,因爲它只是一個隱含的**概念符號**,它沒有物理長度。 ANTLR試圖確定它的位置,同時保持其長度爲0.正常**物理符號**的長度計算爲「end-start + 1」。 ANTLR希望保留這個公式。所以它必須有意識地使''結尾小於1'的概念性符號,如。以這種方式,ANTLR對於象 **這樣的概念性符號**和**通用長度公式**實現**零長度。 – smwikipedia 2014-12-14 08:06:16