- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Antlr 是否适合从要解析的文本后面没有 EOF 的流中解析数据?根据我的观察,词法分析器在收到下一个 token 的第一个字符之前不会发出当前 token 。最重要的是 - 解析器似乎不会发出规则,直到收到下一个规则的第一个标记。这是我尝试过的简单语法:
fox: 'quick' 'brown' 'fox' '\r'? '\n' ;
然后我将生成的解析器与 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();
当流变得“快”时 - 什么也不会发生。
当“b”出现时 - 输入规则“fox”
然后 'round' - 什么都没有(流中有 2 个 token - 目前还没有一个 token 是已知的!)
仅在“f”之后,监听器才会访问第一个标记:“quick”
然后 - 'ox' 上什么也没有
换行 (unix):访问 token 'brown'
现在流已包含所有数据(4 个 token ),但仅识别 2 个 token 。
我发现为了将这些 token 推送到系统中,流可以发出 2 个 token ,即语法已知的任何 token 。它可能是 2 个额外的新行,或者比方说“fox”和“brown”。只有当标记“fox”和“\n”被访问时,解析器才会退出规则“fox”并完成解析。
这是一个错误还是一个功能?有没有办法消除这种滞后?
谢谢!
最佳答案
ANTLR 4 书最初打算包含一个解析流输入的示例,但我反对它,因为使用自适应无限前向解析器来处理类似的事情将不可避免地产生严重的复杂性。
ANTLR 4 没有保证的先行限制(并且没有办法告诉它寻找甚至尝试强制执行),因此任何在阻塞流上操作的实现都有可能出现死锁,而不返回有关解析引导的信息到那时。我什至不会考虑解析流输入的可能性,除非我首先看到中间缓冲区。
String
或 char[]
中。ANTLRInputStream
。解析的结果将告诉您是放弃该点的结果,还是保留它们以在有更多数据可用时重试:
如果没有发生语法错误,则输入已成功解析,您可以在稍后可用时解析下一部分输入。
如果在使用 EOF token 之前报告语法错误,则实际输入中会出现语法错误,因此您需要对其进行处理(将其报告给用户,等等...)。
如果在使用 EOF 标记时报告语法错误,则额外的输入可能会解决问题 - 忽略当前解析的结果,然后在输入流中有更多数据可用时重试。
关于sockets - 使用 Antlr 解析永无止境的流中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864777/
下面的代码永远不会结束。这是为什么? #include #include #include #define SIZE 5 int nums[SIZE] = {0, 1, 2, 3, 4}; in
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我在 Node 中的 promise 方面遇到了问题,特别是在下面的代码中,我编写这些代码是为了执行 MySQL 查询,以便我的所有其他 100 多个函数可以共享它,而不是内联编写它。来自 PHP 开
我需要从表中删除重复项,同时保留一项。由于在 where 语句内的子查询中访问同一个表时无法从表中删除,因此我决定将受影响的 ID 存储在临时表中: create temporary my_temp_
我有以下 json 对象: "comments": [ {"username": "test", "comment": "This is a comment", "child": [
我正在尝试学习如何使用 hadoop 流。我正在尝试运行一个非常简单的映射器,并且没有缩减器。当我运行该程序时,它完成了 100% 的 map task ,然后在十分钟内什么都不做,然后报告它已完成所
我正在为 git 可执行文件创建一个简单的 Java 包装器,我想在我的应用程序中使用它。一个小代码示例: public static void main(String[] args) {
我正在学习react.js,并且我使用安装了react-tools的npm。但是在我输入命令: jsx --watch src/build/后,我对 jsx 文件做了一些更改。控制台日志: app.j
今天我下载了 Visual Studio 2012 的更新 4。我已经从Microsoft网站下载了文件VS2012.4.exe。我已从命令行“VS2012.4.exe/layout”运行此文件。这已
有时,在我搜索某些内容(或不小心单击“搜索定义”)后,主要是在 PHP 文件中,VS 开始永无止境的(运行蓝线)搜索(并且我在此期间听到 CPU 负载)。但是,我不能取消那个,没有 Esc 和 Ctr
我在 MySQL 上遇到性能问题。数据库包含大约40万条记录,站点在Drupal上运行,所有列都有索引。不幸的是,有些广告没有所有数据,所以我需要使用 LEFT JOIN 而不是 INNER JOIN
我是一名优秀的程序员,十分优秀!