植物 植物
直前対策講座:構文解析

AOBA's Information Processing Education



1998/07/26

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


「平成8年第2種 午後 問1」

問1 構文解析に関する次の記述を読んで、設問に答えよ。

 浮動小数点定数の構文規則を次のように定義する。ここで、構文の記述に用いる記号の意味を表のように定める。また、英数字,.(ピリオド),+及び−は、字句要素である。

 表 構文の記述に用いる記号の意味

  記号  意味
::=定義する
又は
[ ]"["と"]"で囲まれた構文要素は省略可能

浮動小数点定数 ::=[符号]小数点定数[指数部] | [符号]数字列 指数部
小数点定数 ::=[数字列].数字列 | 数字列.
指数部 ::= E[符号]数字列
数字列 ::= 数字 | 数字列 数字
数字 ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
符号 ::= + | −

 例: 123.456E25
  −123.E−5
  .123E+35
  123.

 この構文規則で定義される浮動小数点定数の解析手続きを、状態遷移図で表現すると、図のとおりになる。ここで、円の中の数字は状態番号を、⇒○は初期状態を、◎は最終状態を示す。また、入力文字列は、左から1文字ずつ解析される。

図1

設問 図中の(  )に入れる正しい答えを、解答群の中から選べ。
解答群
 ア 英字  イ 英数字  ウ 数字  エ 符号  オ E
 カ e  キ +  ク −  ケ .  コ ,


解説

 いつもは午後の問1と問2は流れ図の問題が出題されていましたが、平成8年の秋期試験の問1(今週の問題)と平成9年の春期試験の問2では、流れ図が出題されませんでした。
 でもこんなことで驚くことはありません。
 いずれにしても、午後の問1と問2は、論理的な思考力を試される問題が出題されます。流れ図の問題が解ける力を身につければ、おのずとこの類の問題は正答できるようになりますから。

 さて、今週は構文解析に関わる状態遷移図の問題です。ただし構文解析や状態遷移図についての深い知識は必要ありません。問題文を読んで、その場で考えれば解答できます。

aについて

 まずはっきりしておかなければならないのは、問題の状態遷移図は浮動小数点定数の解析手続きである、ということです。ここで、浮動小数点定数の定義を再度以下に示します。

浮動小数点定数 ::=[符号]小数点定数[指数部] | [符号]数字列 指数部

 この定義から、浮動小数点定数の先頭は、(1)符号か(2)小数点定数か(3)数字列のいずれかであることが分かります。
 次に(2)の小数点定数の定義を見てみましょう。

小数点定数 ::=[数字列].数字列 | 数字列.

 この定義からは、小数点定数の先頭は(4)数字列か(5).(ピリオド)のいずれかであることが分かります。

 今度は(4)数字列の定義です。

数字列 ::= 数字 | 数字列 数字

 この定義は「数字列は、数字もしくは、末尾の数字の前方が数字列から構成される」と読みます。つまり、数字だけで構成されるものが数字列です(数字列の定義自体は最も難しいのですが、定義なんて分からなくても感覚で分かるでしょう。それで十分です)。
 ということで、(4)数字列の先頭は必ず数字になります。

 ここまでを総合して、最初に戻り浮動小数点定数の先頭1文字が何になるかを考えましょう。

(1)符号のケース
 符号になる。....1文字だから
(2)小数点定数のケース
 先頭が(4)数字列の場合は、数字になる。
 先頭が(5).(ピリオド)の場合は.(ピリオド)になる。....1文字だから
(3)数字列のケース
 数字になる。

 つまり、浮動小数点定数の先頭1文字は、符号か数字か.(ピリオド)のいずれかになります。

 ここで、状態遷移図の@に注目してください。@→Aは符号の時、@→Cは数字の時に遷移します。
 だから@→Bは、残りの.(ピリオド)以外ありえません。

bについて

 状態遷移図の中に最終状態の◎が2箇所あることに注目し、浮動小数点定数の最終状態を考えます。
 ここでまたまた浮動小数点定数の定義。

浮動小数点定数 ::=[符号]小数点定数[指数部] | [符号]数字列 指数部

 この定義から浮動小数点定数は、指数部が付く場合と付かない場合の2ケースが存在することが分かります([]内は省略可)。
 だから浮動小数点定数の最終状態は、小数点定数で終了した場合と、末尾に指数部が付いた場合の2ケースであり、これが状態遷移図におけるDとGです。
 指数部が付く場合は、文の中に必ず”E”があるはず(指数部の定義参照)。
 また、状態遷移図のDに注目すると、D→Eは”E”の時に遷移していますので、Dが小数点定数で終了した場合で、Gが指数部が付いた場合です。
 次に、最終状態Gに至るルートの中に、”E”で遷移するルートがあるかどうか確かめましょう。

 空欄(b)のC→Eと遷移する時も最終的にはGに遷移しますが、Cまでに至るルートの中に”E”で遷移するルートはありません。
 したがって、C→Eは”E”の時に遷移するルートである必要があります。

cについて

 最終状態が小数点定数であるDに注目して、再度小数点定数の定義

小数点定数 ::=[数字列].数字列 | 数字列.

 この定義から小数点定数の末尾は、数字(数字列は末尾も数字)か.(ピリオド)であることが分かります。
 ということは、空欄(c)のD→Dは、数字か.(ピリオド)のどちらかになるはずです。
 さらにD→Dは複数回通過することもあることから、ここは数字の時に遷移するルートです(ピリオドが連続した文,例えば”123..”は小数点定数ではありませんので)。

 とこのように、流れ図の空欄穴埋め問題と同じような発想で解くことができるのです。
 今週は以上です。
 ではまた来週。


解答

設問 a−ケ  b−オ  c−ウ