Я пытаюсь создать парсер ANTLR для Lua. Поэтому я взял грамматику Николая Майнеро (доступна на сайте ANTLR, грамматика Lua 5.1) и начал работать.
Грамматика это хорошо. Одна вещь не работает: LONG STRINGS.
Правило спецификации Lua: Literal
строки также могут быть определены с помощью
длинный формат, заключенный в длинные скобки.
Мы определяем открывающую длинную скобку
уровень n как открывающая квадратная скобка
с последующими n знаками равенства, за которыми следуют
еще одна открывающаяся квадратная скобка. Итак,
открывающая длинная скобка уровня 0
записывается как [[, открывающая длинная скобка
уровня 1 записывается как [= [, и так
на. Закрывающая длинная скобка определена
так же; например, закрытие
длинная скобка уровня 4 записывается как
] ====]. Длинная строка начинается с
открывая длинную скобку любого уровня и
заканчивается на первой закрывающей длинной скобке
того же уровня. Литералы в этом
форма в скобках может работать на несколько
линии, не интерпретировать любой побег
последовательности и игнорировать длинные скобки
любой другой уровень. Они могут содержать
ничего кроме закрывающей скобки
надлежащий уровень. надлежащий уровень.
Мой вопрос близок по значению к этому , но инструменты разные.
Небольшой пример LONGSTRING:
local a = [==[ Some interesting string [=[ sub string in string ]=] [hello indexes] [[And some line strings]] ]==] - its correct string.
local f = [==[ Not interesting string ]=] - incorrect string
Здесь мое правило для LONGSTRING без символа '=':
LONGSTRING: '[[' (~(']') | ']'(~(']')))* ']]';
Может кто-нибудь мне помочь? Спасибо!