本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和元年度 技術士第一次試験問題【専門科目】

V−1

次のバッカス・ナウア記法 (BNF) で定義された文法を考える。
 <S> :: = <A><B>
 <A> :: = a | a<A>
 <B> :: = b | b<B> | c | c<B>

ここで、< > で囲まれたものは非終端記号、英小文字1文字は終端記号とし、開始記号を <S> とする。次のうち、この文法によって生成される文を正規表現で表したものとして最も適切なものはどれか。ただし、正規表現において * は直前のものの0回以上の繰り返しを、 | は選択を表すものとする。

@ aa*(bb*|cc*)

A aa*(bc)(bc)*

B aa*(b|c)(b|c)*

C a*b*c

D a*(b|c)*


正解

B


解説

@ BNFでは、例えば abc が表現可能であるが、正規表現では生成できない。

A BNFでは、例えば abb や acc が表現可能であるが、正規表現では生成できない。

B 正しい。

C a*b*c* の正規表現では、例えば a が0回、すなわち aがなくてもよいが、BNFでは、
 <S> :: = <A><B> 
つまり、 (a | a<A>)<B>により、a が少なくとも1つ以上は現れなければならない。

D Cと同様であり、誤り。

目次 V−2