応用情報技術者過去問題 平成22年秋期 午後問2

⇄問題文と設問を画面2分割で開く⇱問題PDF⇱解答用紙PDF

問2 プログラミング

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

 宣言部と実行部からなる図1のような記述をするプログラム言語がある。その構文規則を,括弧記号で表記を拡張したBNFによって,図2のように定義した。
pm02_1.gif/image-size:212×111
 図2において,引用符「‘」と「’」で固まれた記号や文字列,<数>,及び<識別子>は終端記号を表す。そのほかの「<」と「>」で固まれた名前は非終端記号を表す。<数>は1文字以上の数字の列を表し,<識別子>は英字で始まる1文字以上の英字又は数字からなる文字列を表す。
 また,A|B はAとBのいずれかを選択することを表し,{A} はAを0回以上繰り返すことを表す。
pm02_2.gif/image-size:376×203
 例えば,図1の最初の行 "short aa ;" は,図2の<宣言部記述>の定義に従っていて,<宣言記述子>と‘short’,<> と‘aa’ 更に‘;’同士がそれぞれ対応していることが分かる。

〔字句解析関数の定義〕
 プログラム記述が図2の構文規則に従っているかどうかを検査するプログラムを作成するために,字句を先頭から順番に抽出し,その種類を判定する関数 gettoken() を定義する。ここでいう字句とは,構文規則における終端記号である。字句と字句は,空白や改行文字で区切られている。空白や改行文字は,字句そのものには含まれない。字句の種類と関数 gettoken() の戻り値の対応を表に示す。
 なお,‘short’と‘long’は<識別子>には含まれない。また,いずれの終端記号にも該当しない字句やプログラム記述の終わりを検出した場合の戻り値も定義する。
pm02_3.gif/image-size:359×210
〔構文解析プログラム〕
 図3は,図2の構文規則に従って,<文>及び<式>の構文を検査するプログラムである。プログラムの前提条件を次に示す。
  • <文>,<式>及び<項>の構文解析を行う関数をそれぞれ bun(),shiki() 及び kou() とする。これらの関数の戻り値は,構文が正しい場合は 0,エラーが検知された場合は−1である。
  • 構文解析を行う各関数実行開始時の変数 token の値は,検査の対象となる文字列の最初の字句に対する関数 gettoken() の戻り値である。
pm02_4.gif/image-size:415×659

設問1

図2中のに入れる適切な非終端記号又は終端記号の名前を答えよ。

-解答入力欄-

  • ア:
  • イ:
  • ウ:

-解答例・解答の要点-

  • ア:宣言部記述
  • イ:識別子
  • ウ:因子

-解説-

この設問の解説はまだありません。

設問2

次のプログラム記述には,図2で示した構文規則に反するエラーが幾つか含まれている。構文規則に反するエラーを含む行の番号をすべて答えよ。
pm02_5.gif/image-size:299×124

-解答入力欄-

-解答例・解答の要点-

  • A,D

-解説-

この設問の解説はまだありません。

設問3

図3中のに入れる適切な字句を答えよ。

-解答入力欄-

  • エ:
  • オ:

-解答例・解答の要点-

  • エ:tokenと'='が等しい
  • オ:kou()と−1が等しい

-解説-

この設問の解説はまだありません。

設問4

"d = a * (3 + b) ;" のように,式の演算子の評価順序を明示的に記述するため,「(」及び「)」を使えるように構文規則を拡張したい。これについて,(1),(2)に答えよ。
  • 図2の構文規則の中の<因子>の行を,次のように書き換えた。に入れる適切な字句を答えよ。
      <因子>::=<数>|<識別子>|‘(’‘)’
  • この構文規則の拡張によって,関数 gettoken() も修正する必要がある。どのような修正が必要か,35字以内で述べよ。

-解答入力欄-

    • カ:

-解答例・解答の要点-

    • カ:<式>
    • ・「(」と「)」に対してほかの字句とはそれぞれ別の戻り値を返す (30文字)
      ・( と ) の字句に対しそれぞれ ( と ) を返す (26文字)

-解説-

この設問の解説はまだありません。
問2成績

平成22年秋期 午後問題一覧

問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 問12 採点講評
© 2010-2021 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop