
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
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、正規表現、文法、形式言語、情報工学部門