2014-12-13 2 views
1

Я пытаюсь в ANTLR 4, это дает мне выход для простого Hello грамматики в книге < The Definitive ANTLR 4 Reference>:Позиция <EOF> в ANTLR 4 выглядит странно?

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

Согласно толкованию книги, то 12:11 запись означает <EOF> маркер начинается с позиции 12 и заканчивается на 11. Как это возможно?

PS. Я работаю над Windows.

+0

Возможно, его измерение в байтах, используя кодировку UTF-16? – Mephy

ответ

2

В ANTLR 4 обе конечные точки включены. Длина пролета с включительно конечными точками является следующее:

Длина = Конец - Начало + 1

длина символа EOF равен 0 (он появляется в известном местоположении, но она содержит нет входных символов). Если вход 12 символов, вы получите эту формулу для конечного положения:

0 = End - 12 + 1

Поэтому:

End = 0 + 12 - 1 = 11

+0

Спасибо. Поэтому я стараюсь понять мотив этого. My * guess * is, является особенным, потому что это просто неявный ** концептуальный символ **, который не имеет физической длины. ANTLR пытается идентифицировать свою позицию, сохраняя свою длину равной 0. Длина нормального ** физического символа ** рассчитывается как «end-start + 1». И АНТЛР хочет сохранить эту формулу. Поэтому он должен сознательно сделать «конец меньше, чем начать на 1» для концептуальных символов, таких как . Таким образом, ANTLR достигает как ** нулевой длины для концептуального символа типа **, так и ** формулы универсальной длины **. – smwikipedia

 Смежные вопросы

  • Нет связанных вопросов^_^