我正在使用 C# 在 ANTLR 中编写一个解析器,该语言允许使用反斜杠将一行语法拆分为多行,以指示有后续行。这进一步
我正在用 C# 编写 ANTLR 解析器,该语言允许使用反斜杠将一行语法拆分为多行,以指示有后续行。这进一步复杂化了能够向任何代码行添加注释的能力。例如,我可以写类似
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 中做到这一点,而无需编写某种形式的预解析器?
任何建议都将不胜感激