文法規則部とは? わかりやすく解説

文法規則部

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/16 05:20 UTC 版)

Yacc」の記事における「文法規則部」の解説

文法規則部には1個以上のYacc文法規則 変換結果: 構成要素1 構成要素2 … ; を記述しなければならない。 ここで,変換結果とは、規則記述する非終端記号構成要素とは、この規則マッチするかを判定するために文法どおりの順に並べられる、0個以上の終端記号非終端記号の列。例: qa: expr { printf(" Ans = %Lg", $1); prompt(); } /* 規則5 改行計算表示.*/ 同じ変換結果生む複数規則次のように簡略に連続記述できる。 変換結果: 構成要素11 構成要素12 … | 構成要素21 構成要素22 … | 構成要素31 構成要素32 … ; 「;」は省略可能。 見て分かるとおり、構文規則読み書きしやすいBNF記法になっている規則マッチするたびに行ないたい動作、たとえば変換結果の意味値("$$")をその構成要素の意味値("$1", "$2", …)から計算すること、あるいは値を表示出力などは、C言語命令によるアクションとして「{ }」に囲ってマッチ直前実行したい構成要素直前付して、あるいは規則適用時実行でよければその規則最後構成要素のあとに記述する。 例: 上例の「{ printf(" Ans = %Lg", $1); prompt(); }」はqaexprマッチ判定されたとき実行される規則再帰的定義できる。例で expr: NUM /* 規則6 「$$=$1;」は省略可 */ | expr '+' expr { $$ = $1 + $3; } /* 規則9 加算.*/ の規則6は、「NUMと名付けた数値トークンがきたら、それ1個単独でも式exprになる」と宣言している。 そして規則9は「expr '+' exprという並びexprである」という意味で自分exp記述しているから再帰的な定義である。すると、規則繰り返して適用できるから、 NUMNUM '+' NUMNUM '+' NUM '+' NUM: など1個以上のNUMの加算式が、わずか2個の規則だけで表現できる構文解析器実行時このうちのどれがやってきてもexprマッチすると認識できることになる。 トークン値は実際にASCIIコード重ならない256上の整数であるが、Yacc文法記述者はその値を知らなくてよく、NUM, EOLといった通常大文字記述する記号宣言規則統一的に記載すればよい。 トークンの意味値が伴う種類トークンは、とりうる型は"%union"によって列挙して定義しておく。そして"%token"で""のように共用体のどのメンバーであるかを明示できる。アクション中で"$$"と書かれた意味値はC言語になったとき"lval.ldval"のように共用体中の要素を指すように自動変換されるこのように意味値が伝わっていく。

※この「文法規則部」の解説は、「Yacc」の解説の一部です。
「文法規則部」を含む「Yacc」の記事については、「Yacc」の概要を参照ください。

ウィキペディア小見出し辞書の「文法規則部」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「文法規則部」の関連用語

文法規則部のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



文法規則部のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのYacc (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS