Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2014年11月26日(水)

久しぶりに Racc を使ったサンプルを書いた

| 16:22 |  久しぶりに Racc を使ったサンプルを書いた - Going My Ruby Way を含むブックマーク はてなブックマーク -  久しぶりに Racc を使ったサンプルを書いた - Going My Ruby Way  久しぶりに Racc を使ったサンプルを書いた - Going My Ruby Way のブックマークコメント

久しぶりに Racc を使ったので、貼る。

意味のあるパーサじゃありません。サンプルです。

----

myparser.ry

class MyParser
rule

  text :
       | text line EOL

  line :
       | 'URL:' URL
       | 'e-mail:' MAIL

end

---- inner
def parse(f)
  @q = []

  f.readlines.each do |line|

    line.split.each do |s|
      case s
        when /\Ahttps?:.+/   ; @q << [:URL,  s]
        when /\A[^@]+@[^@]+/ ; @q << [:MAIL, s]
        else                 ; @q << [s, s]
      end
    end

    @q << [:EOL, $/]
  end

  do_parse
end

def next_token
  @q.shift
end

---- footer
MyParser.new.parse $<

コンパイル

$ racc -o myparser.rb myparser.ry

入力テキスト例 (sample.txt)

e-mail: fuga@hoge.example.jp
URL: http://www.hoge.example.jp

URL: https://www.hoga.example.co.jp

実行例

$ ruby myparser.rb sample.txt

構文解析が成功した場合、何も出力されません。