---
generated_at: 2026-02-22 10:15:00
metrics:
  claims_total: 30
  claims_with_evidence: 28
  claims_without_evidence: 2
confidence_derived: 0.93
---

# 根拠レポート：92-パーサジェネレータ（Lrama）

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.93**
  - 根拠あり：28 / 30、根拠なし：2
- 優先レビュー（高）
  1. **Digraphアルゴリズムの時間計算量O(n)**：アルゴリズム論文の記載に基づくが、実装の厳密な計算量分析は未実施
  2. **BisonとのAPI互換性の範囲**：Bison互換テンプレートを使用しているが、完全互換の程度は未確認
  3. **mruby-compilerとの連携方法**：ビルドシステムからの呼び出し関係はRakefileの分析に依存

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `tools/lrama/exe/lrama` - エントリーポイント実行ファイル
- E-02: `tools/lrama/lib/lrama/command.rb` - メイン処理フロークラス
- E-03: `tools/lrama/lib/lrama/option_parser.rb` - オプション解析クラス
- E-04: `tools/lrama/lib/lrama/options.rb` - オプションデータクラス
- E-05: `tools/lrama/lib/lrama/lexer.rb` - 字句解析器
- E-06: `tools/lrama/lib/lrama/parser.rb` - Racc生成の構文解析器
- E-07: `tools/lrama/lib/lrama/grammar.rb` - 文法データ構造
- E-08: `tools/lrama/lib/lrama/states.rb` - LALR状態計算
- E-09: `tools/lrama/lib/lrama/context.rb` - テーブル構築
- E-10: `tools/lrama/lib/lrama/output.rb` - Cソース出力
- E-11: `tools/lrama/lib/lrama/digraph.rb` - Digraphアルゴリズム
- E-12: `tools/lrama/lib/lrama/grammar_validator.rb` - バリデーション
- E-13: `tools/lrama/lib/lrama/diagnostics.rb` - 診断出力
- E-14: `tools/lrama/lib/lrama/states_reporter.rb` - 状態レポート
- E-15: `tools/lrama/lib/lrama/trace_reporter.rb` - トレースレポート
- E-16: `tools/lrama/lib/lrama/version.rb` - バージョン定義
- E-17: `tools/lrama/lib/lrama.rb` - モジュール定義
- E-18: `tools/lrama/template/bison/yacc.c` - Cパーサテンプレート
- E-19: `docs/code-to-docs/機能一覧/機能一覧.csv` - 機能一覧定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | LramaはLALR(1)パーサジェネレータである | E-02, E-08 | ○ |
| C-02 | バージョンは0.7.0 | E-16 (4行目: `VERSION = "0.7.0"`) | ○ |
| C-03 | exe/lramaがエントリーポイント | E-01 (7行目: `Lrama::Command.new.run(ARGV.dup)`) | ○ |
| C-04 | デフォルトスケルトンはbison/yacc.c | E-04 (13行目: `@skeleton = "bison/yacc.c"`) | ○ |
| C-05 | デフォルト出力ファイルはy.tab.c | E-04 (18行目: `@outfile = "y.tab.c"`) | ○ |
| C-06 | StringScannerベースの字句解析 | E-05 (3行目: `require "strscan"`, 49行目) | ○ |
| C-07 | :initialと:c_declarationの2状態で字句解析 | E-05 (57-63行目) | ○ |
| C-08 | Raccで生成されたパーサを使用 | E-06 (1-3行目: `DO NOT MODIFY! ... automatically generated by Racc`) | ○ |
| C-09 | stdlib.yのパラメタライジングルールを自動統合 | E-02 (23-26行目) | ○ |
| C-10 | %no-stdlibでstdlib統合をスキップ | E-02 (23行目: `unless grammar.no_stdlib`) | ○ |
| C-11 | grammar.prepareで文法準備処理を実行 | E-07 (146-157行目) | ○ |
| C-12 | nullable計算を反復的に実行 | E-07 (181-228行目) | ○ |
| C-13 | FIRST集合をビットマップで計算 | E-07 (230-263行目), E-11 | ○ |
| C-14 | LR(0)状態をBFS的に構築 | E-08 (263-292行目) | ○ |
| C-15 | DeRemer&Pennelloアルゴリズムに基づくLALR計算 | E-08 (11行目コメント: "Efficient Computation of LALR(1) Look-Ahead Sets") | ○ |
| C-16 | Digraphアルゴリズムで集合計算 | E-11 (5行目コメント, 50-81行目) | ○ |
| C-17 | S/R衝突を優先度・結合性で解決 | E-08 (444-509行目) | ○ |
| C-18 | %left→Reduce優先、%right→Shift優先、%nonassoc→エラー | E-08 (477-502行目) | ○ |
| C-19 | IELR状態分割をサポート | E-08 (99-111行目), E-02 (37行目) | ○ |
| C-20 | %define lr.type 'ielr'でIELR有効化 | E-07 (175-177行目) | ○ |
| C-21 | テーブルパッキングでyytable/yycheckを構築 | E-09 (399-497行目) | ○ |
| C-22 | yypact_ninf/yytable_ninfで特殊値を表現 | E-09 (467-487行目) | ○ |
| C-23 | ERBテンプレートでCソース生成 | E-10 (3行目: `require "erb"`, 49-64行目) | ○ |
| C-24 | @oline@/@ofile@の特殊変数置換 | E-10 (451-457行目) | ○ |
| C-25 | %expectで期待衝突数を検証 | E-12 (17-35行目) | ○ |
| C-26 | 反例生成（counterexamples）機能がある | E-14 (236-254行目), E-17 (6行目) | ○ |
| C-27 | Report::Durationで処理時間計測 | E-08 (84-97行目), E-10 (50行目) | ○ |
| C-28 | コマンドラインオプションの一覧が正確 | E-03 (49-107行目) | ○ |
| C-29 | DigraphアルゴリズムはO(n)の時間計算量 | E-11 (5行目の論文参照) | △ |
| C-30 | Bison完全互換の出力を生成 | E-18 (テンプレート), E-10 | △ |

## 4) 不足情報（Unknown / Missing）
- C-29: Digraphアルゴリズムの計算量O(n)は論文（DeRemer&Pennello 1982）の理論的記載に基づく。実装のプロファイリング結果による裏付けはない。
  - 候補：論文 "Efficient Computation of LALR(1) Look-Ahead Sets" / ベンチマーク結果 / プロファイリングデータ
- C-30: Bison互換性の範囲については、テンプレートファイルの構造からBison形式であることは確認できるが、完全互換かどうかはBisonの全機能との比較が必要。LramaはBisonにない拡張（パラメタライジングルール、IELR等）も含む。
  - 候補：Bisonドキュメントとの機能比較 / 互換性テスト結果

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - メイン処理フロー（command.rb）の記述はソースコードの行番号レベルで対応
- 0: 低リスク - LALR計算アルゴリズムの記述はstates.rbのコメントと一致
- 0: 低リスク - コマンドラインオプションはoption_parser.rbの定義と一致
- 1: 中リスク - Bison互換性の記述は概要レベル。詳細な互換性範囲は要確認
- 0: 低リスク - テーブル圧縮アルゴリズムの記述はcontext.rbの実装と一致

## 6) レビュアーチェックリスト（最小）
- [ ] Command#runメソッドの処理フロー記述がcommand.rbの実装と一致しているか
- [ ] コマンドラインオプション一覧がoption_parser.rbの定義と一致しているか
- [ ] LALR計算ステップ（compute系メソッド）の順序がstates.rbと一致しているか
- [ ] Grammar#prepareの処理ステップがgrammar.rbの実装と一致しているか
- [ ] テーブル圧縮（compute_packed_table等）の説明がcontext.rbと整合しているか
- [ ] S/R衝突解決ルール（%left/%right/%nonassoc）の動作がstates.rbの実装と一致しているか
- [ ] Lramaのバージョン番号（0.7.0）が最新であるか
- [ ] parser.rbがRaccで自動生成されたものであることの確認
