Обработка конструкции продолжения строки в ANTLR - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь написать синтаксический анализатор для 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]*
    ;

Но это выглядит громоздко.Есть ли другой вариант?

...