Hatena::Grouprubyist

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

Ruby ロゴ (C) Ruby Association LLC

2012年04月29日(日)

久しぶりに Racc を使う

| 13:48 | 久しぶりに Racc を使う - Going My Ruby Way を含むブックマーク はてなブックマーク - 久しぶりに Racc を使う - Going My Ruby Way 久しぶりに Racc を使う - Going My Ruby Way のブックマークコメント

久しぶりに Racc を使ってみました。

作ったのは、"Hello world" をパースして OK か判別する非実用(サンプル)品です。

コードは、gist をいうサービスを最近(!)知ったのでそっちにコミットしました。

で、本題です。

Racc を使う上での、(自分基準での)昔と違いをメモしました。

gem からインストール

Ruby はソースからコンパイルしたのを使っています。

Racc は同梱されてないので gem からインストールします。

$ s gem i racc

Ubuntu 12.04 には racc パッケージ(ruby1.8用)が用意されてます。

Racc 実行時に警告

Racc 実行(コンパイルなど)時に以下の"やり方が古いよ"って警告がでます。

とりあえず無視。(開発者がんばれ!)

$ make
racc --debug					  -o hello_parser.rb hello_parser.ry
/usr/local/lib/ruby/gems/1.9.1/gems/racc-1.4.8/lib/racc/parserfilegenerator.rb:117: Use RbConfig instead of obsolete and deprecated Config.

Racc のオプション

今の Racc のバージョンとオプションです。

ええ、と思うんですが、--debug のショートネームが '-g' から '-t' になってます。

(この手のフラグは普通 '-g' だと思うんですが。。。)

$ racc --version
   : 
racc version 1.4.8

$ racc --help
   :
Usage: racc [options] <input>
    -o, --output-file=PATH           output file name [<input>.tab.rb]
    -t, --debug                      Outputs debugging parser.
    -g                               Equivalent to -t (obsolete).
    -v, --verbose                    Creates <filename>.output log file.
    -O, --log-file=PATH              Log file name [<input>.output]
    -e, --executable [RUBYPATH]      Makes executable parser.
    -E, --embedded                   Embeds Racc runtime in output.
        --line-convert-all           Converts line numbers of user codes.
    -l, --no-line-convert            Never convert line numbers.
    -a, --no-omit-actions            Never omit actions.
        --superclass=CLASSNAME       Uses CLASSNAME instead of Racc::Parser.
        --runtime=FEATURE            Uses FEATURE instead of 'racc/parser'
    -C, --check-only                 Checks syntax and quit immediately.
    -S, --output-status              Outputs internal status time to time.
    -P                               Enables generator profile
    -D flags                         Flags for Racc debugging (do not use).
        --version                    Prints version and quit.
        --runtime-version            Prints runtime version and quit.
        --copyright                  Prints copyright and quit.
        --help                       Prints this message and quit.

ちなみに、--debug 付きでコンパイルしただけではデバッグコードは動きません。

パーザクラスの @yydebug を true にする必要があります。

(すっかり忘れてました)

パーザへの最後のトークン

パーザに渡すトークンがもうない場合、next_token などで以下を渡します。

 (昔)        [ false, なにか ]
 (ちょっと昔)  nil でもよい
 (今)        特になにも渡さなくてよい

エンコーディング

Ruby 1.9 からファイルエンコーディングを 1行目(shebang がある場合は 2行目)に以下ような感じで記述するようになりました。

# coding: UTF-8

Racc が吐き出す Ruby スクリプトに埋め込むのは、どうするんでしょう?

疑問です。

そのうち調べよう。。。。