最小限の電卓サンプル
%left
, %right
を使った shift/reduceコンフリクトの解消
%prec
を使った演算子優先順位の調整
%prec
を使った演算子優先順位の調整 その2
reduce/reduceコンフリクトの解消
shift/reduceコンフリクトの解消
プッシュ型パーサーの作成例
言語実装の青写真実装(プッシュパーサー)
%left
,%right
に書かれたトークン, リテラル文字列の優先度・結合規則が yacc 側に記録される- 各構文規則の右辺の最後のトークン or リテラル文字列の優先度・結合規則が、その構文規則の優先度・結合規則となる
%prec
がある場合はそっちが優先される- 規則によっては優先度・結合規則がない場合もある
- 優先度・結合規則が未定義時の競合発生時は以下の動作
reduce/reduce
なら先に記述されたルールで還元shift/reduce
ならshift
- shift/reduce時
- 規則と先読みトークンが優先度・結合規則があるとき
- 優先度 -> 先読みトークン > 規則 then
shift
, elsereduce
- 優先度 -> 先読みトークン = 規則 then
%left
,%right
で結合,%nonassoc
のときはsyntax error
- 優先度 -> 先読みトークン > 規則 then
- 規則と先読みトークンが優先度・結合規則があるとき