小编And*_*eyP的帖子

使用Antlr解析永无止境的流中的数据

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 ",解析器退出规则" …

sockets stream eof antlr4

6
推荐指数
2
解决办法
2782
查看次数

标签 统计

antlr4 ×1

eof ×1

sockets ×1

stream ×1