私は文法ファイルを持っています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
それを利用しようとするルビーファイルがあります:
#!/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
, zerocategory_listing
の自明な一致として)、解析に失敗します(それ自体が 0の"/x\n"
単一の文字列を含むドキュメントとして)。category_listing
url_line
私は何を間違っていますか?