令和元年度 III-1

科目: 専門科目 / 分野: 情報工学部門 / 年度: 令和元年度

III-1 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

BNFで定義された文法<S>::=<A><B>、<A>::=a|a<A>、<B>::=b|b<B>|c|c<B>が生成する文を正規表現で表す問題。

解説

この問題で問われていること

BNFで定義された文法が生成する文字列を、正規表現で表したものを選ぶ問題。

解き方

① <A>=aが1個以上 → aa*。<B>=bかcが1個以上で、bとcは混ぜてよい → (b|c)(b|c)*
② つなげて aa*(b|c)(b|c)*。①はbとcを混ぜられない、②はbcの組しか作れない、④⑤はaが0個やbcが0個も許してしまう
③ ③

正解が正しい理由

<A>::=a|a<A>はaの1回以上の繰り返しで、aa*と表せる。<B>::=b|b<B>|c|c<B>は、bまたはcを1回以上並べたもの(bとcは任意の順序で混在してよい)で、(b|c)(b|c)*と表せる。<S>::=<A><B>なので、全体はaa*(b|c)(b|c)*となる。したがって③が正しい。

各選択肢について

覚えるべきポイント

X::=x|x<X>は「xの1回以上の繰り返し」=xx*。選択肢の違いは「0回を許すか(*)」「要素を混在できるか(b|c)」で見分ける。

キーワード: BNF、正規表現、文法、形式言語、情報工学部門

出題履歴

類題(同じ論点の別問題)