Antlr是否适合解析文本解析后没有EOF的流中的数据?根据我的观察,词法分析器在收到下一个令牌的第一个字符之前不会发出当前令牌.最重要的是 - 在收到下一个规则的第一个标记之前,解析器似乎不会发出规则.这是我尝试过的简单语法:
fox: 'quick' 'brown' 'fox' '\r'? '\n' ;
Run Code Online (Sandbox Code Playgroud)
然后我使用生成的解析器与UnbufferedCharStream和UnbufferedTokenStream:
CharStream input = new UnbufferedCharStream(is);
MyLexer lex = new MyLexer(input);
lex.setTokenFactory(new CommonTokenFactory(true));
TokenStream tokens = new UnbufferedTokenStream(lex);
MyParser parser = new MyParser(tokens);
MyParser.FoxContext fox = parser.fox();
Run Code Online (Sandbox Code Playgroud)
当流" 快速 "时 - 没有任何反应.
当' b '进来时 - 进入规则' 狐狸 '
然后' roun ' - 什么都没有(2个令牌在流中 - 没有人知道它们!)
只有在' f '之后,听众才会访问第一个令牌:' quick '
然后 - ' 牛 ' 没什么
在新行(unix):访问令牌' 棕色 '
现在,流具有所有数据(4个令牌),但只能识别2个令牌.
我发现为了通过系统推送这些令牌,流可以发出2个令牌,即语法已知的任何令牌.它可能是2个额外的新行,或者说' 狐狸 '和' 棕色 '.只有这样才能访问令牌" 狐狸 "和" \n ",解析器退出规则" …