Input ANTLR如何在输入端检测垃圾数据

Input ANTLR如何在输入端检测垃圾数据,input,parsing,antlr,Input,Parsing,Antlr,当使用ANTLR编写的语法时,解析器可以正确地识别输入流中的数据,但是如果输入端有一些垃圾文本(语法不应该解析这些文本),解析器不会抱怨 我猜这种行为是正确的(我的意思是解析器完成了它的工作并解析了我说它应该解析的任何内容),但是在解析器完成了它的工作之后,是否有什么技巧可以检测输入中是否还有任何数据 谢谢。如ANTLR邮件列表中所示: 你好, 当使用ANTLR编写的语法时,解析器会正确识别 来自输入流的数据,但如果我在 输入(语法不应该解析这些垃圾文本) 解析器不会抱怨 我猜这种行为是正确的(

当使用ANTLR编写的语法时,解析器可以正确地识别输入流中的数据,但是如果输入端有一些垃圾文本(语法不应该解析这些文本),解析器不会抱怨

我猜这种行为是正确的(我的意思是解析器完成了它的工作并解析了我说它应该解析的任何内容),但是在解析器完成了它的工作之后,是否有什么技巧可以检测输入中是否还有任何数据

谢谢。

如ANTLR邮件列表中所示:

你好,

当使用ANTLR编写的语法时,解析器会正确识别 来自输入流的数据,但如果我在 输入(语法不应该解析这些垃圾文本) 解析器不会抱怨

我猜这种行为是正确的(我的意思是解析器完成了它的工作并进行了解析) 不管我说了什么,它都应该解析),但是有什么技巧可以检测到什么时候有 在解析器完成其工作后,是否有任何数据留在输入中

谢谢, 加比

将EOF令牌添加到开始规则的末尾

--斯科特


ANTLR生产的AST包括垃圾还是看起来还可以?您应该能够获得最后一个标记的偏移量和长度,并找出它停止的位置,但自从我使用AntlRast以来已经有一段时间了,它还可以。一切正常,输出正确生成,只是如果他们在文件末尾留下任何内容,报告错误会更方便用户。也许存储最后一个标记的位置,然后再进行搜索的技巧会起作用,但也许有更优雅的方法可以做到这一点?是的。谢谢你回到这里。