Я пишу синтаксический анализатор в 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
В настоящее время я рассматриваю обратную косую черту как пробел и игнорирую ее.
Мое определение логического значения:
Код: Выделить всё
// Boolean Expressions
booleanCondition : booleanExpression | '(' booleanExpression ')';
booleanExpression : expression ('='|''|'') expression ((AND|OR|'&&'|'||') booleanExpression)*;
и комментарий
Когда я анализирую код примера, он почти все делает правильно, но полностью пропускает первый комментарий и анализирует второй комментарий как ErrorNode. Есть ли способ сделать это в ANTLR без написания какого-либо препарсера?
Буду очень признателен за любые советы
Подробнее здесь:
https://stackoverflow.com/questions/788 ... s-in-antlr