- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
为什么以下 Parslet 解析器无法解析以逗号分隔的列表?当我解析时,它卡住了并且不提供错误消息:
class TestParser < Parslet::Parser
rule(:name) { match['a-z'].repeat >> str(',').maybe }
rule(:names) { name.repeat }
root(:names)
end
TestParser.new.parse_with_debug('tom,samantha,ricardo') # hangs here
我知道“Parslet word until delimeter present”,并且我知道如何以其他方式解析列表,但我不明白为什么上述方法不起作用。
最佳答案
解释:
无限循环意味着您在解析器中有一个规则正在循环,但它可以匹配空字符串。如果它消耗了任何东西,你就不会得到一个无限循环。
在您的情况下:Repeat
默认为 Repeat(0)
,它可以匹配零个字符。 Maybe
使逗号成为可选的,因此 name
可以在不消耗任何内容的情况下进行匹配,因此它会...重复。
解决方案:
name
改为调用 repeat(1)
。 诊断:
检查我检测这些无限循环的 Parslet 分支。
它在github上。 ( https://github.com/NigelThorne/parslet )
我的分支在第二次进行循环时提示,并且自上次迭代以来它没有消耗任何东西。 (仅用于开发...因为在时间关键循环中有检查,所以执行速度较慢)
关于ruby - 用于逗号分隔列表的简单 parslet 解析器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125572/
我已经开始使用 Parslet 来解析一些自定义数据。在示例中,生成的解析数据类似于: { :custom_string => "data"@6 } 我创建了类似 Transform 的东西 rule
有没有一种方法可以类似于典型正则表达式中的 \1 功能来反向引用 parslet 中的前一个字符串? 我想提取 block 中的字符,例如: Marker SomeName some random
对于下面的Parslet解析器 require 'parslet' require 'parslet/convenience' class Lines > data >> close_tag }
Resume(我把下面的长篇大论缩成了简单的问题) tree = {:properties => [{:a => 'b'}, {:c => 'd'}]} big_tree = {:properties
我有以下规范 it "parses a document with only an expression" do puts parser.document.should parse("[b
我正在尝试为 Handlebars 编写一个 Ruby/Parslet 解析器,但我被 {{ else }} 关键字困住了。为了给那些不使用 Handlebars 的人解释 brieflt,一个 if
我正在研究一种新的编程语言 rip ,而且我无法找到一些无限循环的底部。有没有办法在每个规则被调用时打印出来,这样我就可以看到递归的规则?我试过在脑海中遍历代码,但我就是看不到它。任何帮助将不胜感激。
我正在调查 parslet写了很多数据导入代码。总的来说,图书馆看起来不错,但我正在努力解决一件事。我们的很多输入文件都是固定宽度的,并且宽度因格式而异,即使实际字段没有。例如,我们可能会得到一个包含
为什么以下 Parslet 解析器无法解析以逗号分隔的列表?当我解析时,它卡住了并且不提供错误消息: class TestParser > str(',').maybe } rule(:names
我正在寻找一种匹配多行 Parslet 的方法。代码如下所示: rule(:line) { (match('$').absent? >> any).repeat >> match('$') } rul
我正在尝试使用 Parslet 解析简单的缩进敏感语法Ruby 中的库。 以下是我尝试解析的语法示例: level0child0 level0child1 level1child0 level
我正在玩 parslet。这是一个简单的解析器,它向我展示了一些不明显的行为。 require 'parslet' class Parser > term >> quote end rule(
以 Parslet 中的代码示例作为起点自己的创建者(在此 link 中可用)我需要对其进行扩展,以便从以类 C 语法编写的文件中检索所有未注释的文本。 提供的示例能够成功解析 C 风格注释,将这些区
我有一个 Flexlm/Flexnet 许可服务,我想解析这个服务的输出。所有输出都是多行的结构化 block 。我的第一步是解析 lmutil lmstat -c -a 的输出使用许可证和增量。
我是一名优秀的程序员,十分优秀!