簡體   English   中英

我的Treetop語法出了什么問題?

[英]What's wrong with my Treetop grammar?

我有語法文件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_listing s),但無法解析"/x\\n" (因為包含單個category_listing的文檔本身具有零url_line s)。

我究竟做錯了什么?

看起來category的正則表達式正在通過匹配category_line所需的空白區域前進...執行此操作:

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

(而且,哇, 一個Treetop問題。這是SO歷史上的第47個問題及其400萬個問題。在87,000個SO問題中有一個被標記為Treetop)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM