我有语法文件alexa_scrape.tt
grammar AlexaScrape
rule document
category_listing*
end
rule category_listing
category_line url_line*
end
rule category_line
category "\n"
end
rule category
("/" [^/]+)+
end
rule url_line
[0-9]+ ". " url "\n"
end
rule url
[^\n]*
end
end我有一个ruby文件,它试图使用它:
#!/usr/bin/env ruby -I .
require 'rubygems'
require 'polyglot'
require 'treetop'
require 'alexa_scrape.tt'
parser = AlexaScrapeParser.new
p( parser.parse("") || parser.failure_reason )
p( parser.parse("/x\n") || parser.failure_reason )但是我没有得到我所期望的结果:
SyntaxNode offset=0, ""
"Expected one of /, \n at line 2, column 1 (byte 4) after /x\n"它正确地解析了空字符串(作为document的简单匹配,零category_listings),但无法解析"/x\n" (因为包含单个category_listing的文档本身没有url_lines)。
我做错了什么?
发布于 2012-12-01 02:10:02
看起来category中的正则表达式在匹配category_line所需的空白区域中前进了……执行以下操作:
rule category
("/" [^/\s]+)+ # or perhaps ("/" [^/\n]+)+
end(还有,哇,一个Treetop问题。这是SO历史上的47个问题,总共有400万个问题。每87000个问题中就有一个,因此问题被标记为Treetop)。
https://stackoverflow.com/questions/13650629
复制相似问题