Разбор строк продолжения в ANTLRC#

Место общения программистов C#
Ответить
Anonymous
 Разбор строк продолжения в ANTLR

Сообщение Anonymous »

Я пишу синтаксический анализатор в ANTLR, используя C# для языка, который позволяет разбивать строку синтаксиса на несколько строк с помощью обратной косой черты, чтобы указать, что есть последующие строки. Это еще больше усложняет возможность добавления комментария к любой строке кода. например, я могу написать что-то вроде

Код: Выделить всё

If ((A = B) AND \:Check A and B
(C  D))    :Check C and D
Add 1 Count
End
т. е. оператор If разбит на две строки, но также имеет комментарий к обеим строкам. Разрыв может быть где угодно в строке синтаксиса, поэтому можно также написать

Код: Выделить всё

If ((A = B) \:Check A and B
AND (C  D))    :Check C and D
Add 1 Count
End
В настоящее время я рассматриваю обратную косую черту как пробел и игнорирую ее.

Код: Выделить всё

WS : [ ()\\\t\r\n\f;]+ -> channel(HIDDEN);
Мое определение логического значения:

Код: Выделить всё

// Boolean Expressions
booleanCondition        : booleanExpression | '(' booleanExpression ')';
booleanExpression       : expression ('='|''|'') expression ((AND|OR|'&&'|'||') booleanExpression)*;
и комментарий

Код: Выделить всё

COMMENT                 : ':'+ ~[:=\r\n]*;
Когда я анализирую код примера, он почти все делает правильно, но полностью пропускает первый комментарий и анализирует второй комментарий как ErrorNode. Есть ли способ сделать это в ANTLR без написания какого-либо препарсера?
Буду очень признателен за любые советы

Подробнее здесь: https://stackoverflow.com/questions/788 ... s-in-antlr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»