- ベストアンサー
数式の構文図問題について
- 数式の構文図を作成する問題について解説します。
- プログラムの構文図の作成方法と、数式の構文図の書き方を解説します。
- 具体的な問題とプログラムの解説を行います。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
とりあえず number() だけ拡張バッカス記法で書いてみます.残りはnumber()より単純なので,この応用で分かるでしょう. <sign> ::= '+' | '-' <digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' <integer> ::= <digit> { <digit> } <real> ::= <integer> | <integer> '.' { <digit> } <number> ::= <sign> <real> | <real> number()の最初は if (ch == '+' || ch == '-') で始まるので,頭に符号が付く場合と何も付かない場合があります.符号が付く場合が <number> の記述の <sign> <real> に,付かない場合が <real> のみに対応します. 符号 <sign> は,+または-で,'+' | '-' の記述に対応します. number()の最後が if (ch == '.') { (略) } で終わるので,末尾に小数点以下が付く場合と付かない場合があります.小数点以下が付かない場合が実数 <real> の記述の <integer> のみに,小数点が付く場合が <integer> '.' { <digit> } に対応します.小数点以下は0個以上の数字の繰り返しです. number()の中ほどに if (! isdigit(ch)) error(); ... while (isdigit(ch)) となっているので,これは一つ以上の数字の繰り返しです.これが整数 <integer> の記述の <digit> { <digit> } に対応します.
お礼
ありがとうございます。助かりました。