/usr/share/doc/racc/ja/debug.ja.html is in racc 1.4.9-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?xml version="1.0" ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>rdoc/ja/debug.ja</title>
</head>
<body>
<h1><a name="label-0" id="label-0">パーサのデバッグ</a></h1><!-- RDLabel: "パーサのデバッグ" -->
<p>ここでは、Racc を使っていくうえで遭遇しそうな問題について書きます。</p>
<h2><a name="label-1" id="label-1">文法ファイルがパースエラーになる</a></h2><!-- RDLabel: "文法ファイルがパースエラーになる" -->
<p>エラーメッセージに出ている行番号のあたりを見て間違いを
探してください。ブロックを閉じる行でエラーになる場合は、
どこかで開き括弧などを増やしてしまっている可能性が高いです。</p>
<h2><a name="label-2" id="label-2">なんたら conflict って言われた</a></h2><!-- RDLabel: "なんたら conflict って言われた" -->
<p>一番ありがちで一番面倒な問題は衝突 (conflict) でしょう。
文法中に衝突があると、racc はコンパイル後に
「5 shift/reduce conflict」のようなメッセージを表示します。
-v をつけると出力される .output ファイルからはさらに詳しい情報が得られます。
それをどう使うか、とかそういうことに関しては、それなりの本を読んでください。
とてもここに書けるような単純な話ではありません。
当然ながら『Ruby を 256 倍使うための本 無道編』(青木峰郎著)がお勧めです。</p>
<h2><a name="label-3" id="label-3">パーサは問題なく生成できたけど予想どおりに動かない</a></h2><!-- RDLabel: "パーサは問題なく生成できたけど予想どおりに動かない" -->
<p>racc に -g オプションをつけてパーサを出力すると、デバッグ用のコードが
付加されます。ここで、パーサクラスのインスタンス変数 @yydebug を true に
しておいてから do_parse/yyparse を呼ぶと、デバッグ用メッセージが出力
されます。パーサが動作する様子が直接見えますので、完全に現在の状態を
把握できます。これを見てどこがおかしいのかわかったらあとは直すだけ。</p>
<h2><a name="label-4" id="label-4">next_token に関して</a></h2><!-- RDLabel: "next_token に関して" -->
<p>いまだ自分でも忘れることが多いのが
「送るトークンが尽きたら [false,なにか] を送る」ということです。
ちなみに Racc 0.10.2 以降では一度 [false,なにか] を受け取ったら
それ以上 next_token は呼ばないことが保証されています。</p>
<p>追記: 最近は [false,なにか] ではなく nil でもよいことになった。</p>
</body>
</html>
|