我正在编写解析Javascript代码和注释的C#项目,但是我遇到了一些问题(.g4文件的语法是从ECMAScript语法中完全复制的)。我试过下一个方法:
我将通道值从HIDDEN设置为0
MultiLineComment
: '/*' .*? '*/' -> channel(0)
;
SingleLineComment
: '//' ~[\r\n\u2028\u2029]* -> channel(0)
;
当我使用Antlr解析器运行programm时,会发生意外错误:
第1行:0无关输入' / *一些评论* /'期待{, RegularExpressionLiteral,' [','(',' {',';',' ++&# 39;,' - ',' +',' - ', '〜','!',' null',BooleanLiteral,DecimalLiteral,HexIntegerLiteral, OctalIntegerLiteral,' break',' do',' typeof',' new',' var',' return', '无效','继续','对于','切换','而','调试器& #39;,'功能离子', '这',' with',' if',' throw','删除','尝试& #39;,标识符, 串文字}
我是antlr的初学者,但我怀疑删除命令行" - >跳过"或类似的命令" channel->(HIDDEN)"从语法规则(或不影响代码的标记序列)只是解析器可以看到注释的方式。但是同样有助于我:如何解决这个问题,解析器不会忽略这些注释(它们会被解析器保存)并且代码不会在代码中输出无关的输入错误由antlr验证?如果它是不可能的,那么我必须在我的语法文件(它看起来如何)中添加哪些规则构造,它匹配任何注释,因此在任何词法元素之后:令牌,令牌序列,语句,表达式e.t.c. ?在紧急情况下说:Antlr4手册的哪一章具体说明 关于解决这个任务?最近我下载了Antlr4书,但我找不到确切的答案。