2012-11-30 53 views
3

我有語法文件alexa_scrape.tt我的Treetop語法有什麼問題?

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的微不足道的匹配,零category_listing s),但無法解析se "/x\n"(作爲包含單個category_listing的文檔本身具有零個url_line s)。

我在做什麼錯?

回答

2

它看起來像在category正則表達式通過匹配category_line所需的空白前進......做到這一點:

rule category 
    ("/" [^/\s]+)+ # or perhaps ("/" [^/\n]+)+ 
    end 

(而且,哇,樹頂問題這是數47。 SO及其400萬個問題的歷史,87,000個SO問題中的一個被標記爲Treetop)

+0

[#48](http://stackoverflow.com/questions/13655658/can-i-use-treetop-to-parse-an-io)現在可用。 – rampion