Я пытаюсь написать синтаксический анализатор для Cobol с ANTLR.
Одна вещь, с которой я сталкиваюсь, это проблема продолжения строки.Символ продолжения строки - -
, и он расположен в начале строки , которая предназначена для продолжения предыдущей строки.
Это продолжение строки имеет следующие правила:
Строковый литерал может занимать несколько строк.Если это так, строковый литерал не закрывается на определенной строке.Следующая строка начинается с тире (-
), а затем первый непробельный символ должен быть "
.Наконец, строка закрывается с помощью "
.
Примером может быть такой:
display "Hello W
- "orld!"
Этот код точно такой же, как если бы мы написали
display "Hello World!"
Для всех остальных случаев: любой токен можно продолжить на следующей строке.Это относится к ключевым словам, числовым литералам, определениям переменных, операторам и т. Д.
Затем оно работает следующим образом:
disp
- lay
compute a = 1234
- 56789
Как мне справиться с этим поведением?
Одним из вариантов было бы сделать что-то подобное в грамматике:
DISPLAY : D I S P L A Y ;
INTEGER_LITERAL : ZERO | NONZERO_DIGIT DIGIT+ ;
ZERO : '0' | LC;
NONZERO_DIGIT : [1-9] ;
DIGIT : [0-9] | LC ;
fragment A : [Aa] | LC ;
fragment B : [Bb] | LC ;
...
NEWLINE
: '\n' | '\r' '\n'?
;
// Line continuation
fragment LC
: [ \t]* NEWLINE '-' [ \t]*
;
Но это выглядит громоздко.Есть ли другой вариант?