通过Antlr解析器

时间:2016-11-10 03:38:36

标签: c# antlr4

我正在编写解析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书,但我找不到确切的答案。

0 个答案:

没有答案