HOME»基本情報技術者試験掲示板»BNF記法について
投稿する
BNF記法について [5966]
kosukeさん(No.1)
BNF記法について質問させて頂きます。
以下の再帰的定義の<変数名>(右側の方)が呼び出されることでどのようになるのでしょうか?
再帰的定義が全く理解できておらず、現状前半の<英字>のみだとA ~ Fのどれかが出力されて処理が終わると解釈しています。
仮に<変数名><英数字>の方が処理されると、<英数字>に含まれる<英字><数字>アンダーバーのいずれかが出力されると考えています。
<変数名> ::= <英字> | <変数名><英数字>
質問内容が曖昧になってしまいすみません。
ご教示頂きたく思います。
【問題】
https://www.fe-siken.com/kakomon/01_aki/q7.html
以下の再帰的定義の<変数名>(右側の方)が呼び出されることでどのようになるのでしょうか?
再帰的定義が全く理解できておらず、現状前半の<英字>のみだとA ~ Fのどれかが出力されて処理が終わると解釈しています。
仮に<変数名><英数字>の方が処理されると、<英数字>に含まれる<英字><数字>アンダーバーのいずれかが出力されると考えています。
<変数名> ::= <英字> | <変数名><英数字>
質問内容が曖昧になってしまいすみません。
ご教示頂きたく思います。
【問題】
https://www.fe-siken.com/kakomon/01_aki/q7.html
2025.07.04 10:02
QMさん(No.2)
★FE ゴールドマイスター
「呼び出す」「処理が終わる」などの書き方を見るに、
プログラムのように何かを処理して特定の結果を出力するものと認識されているようですが。
どちらかというと、「このパターンに合致するものなら可」というルールの定義です。
<変数名> ::= <英字> | <変数名><英数字>
の場合は、
「変数名とは、英字1個か、変数名として認められる文字列の後ろに英数字が1個加わったもの」
という意味です。
たとえば
A は英字1個なので変数名。
A1 は「変数名であるA」+英数字1個なので変数名。
A12 は「変数名であるA1」+英数字1個なので変数名。
A12_ は「変数名であるA12」+英数字1個なので変数名。
以降、再帰的な定義部分によって、
英数字は何個でも後ろに追加OK、
ということになります。
プログラムのように何かを処理して特定の結果を出力するものと認識されているようですが。
どちらかというと、「このパターンに合致するものなら可」というルールの定義です。
<変数名> ::= <英字> | <変数名><英数字>
の場合は、
「変数名とは、英字1個か、変数名として認められる文字列の後ろに英数字が1個加わったもの」
という意味です。
たとえば
A は英字1個なので変数名。
A1 は「変数名であるA」+英数字1個なので変数名。
A12 は「変数名であるA1」+英数字1個なので変数名。
A12_ は「変数名であるA12」+英数字1個なので変数名。
以降、再帰的な定義部分によって、
英数字は何個でも後ろに追加OK、
ということになります。
2025.07.04 10:40
jjon-comさん(No.3)
★FE プラチナマイスター
基本情報 令和元年 秋期 午前 問7
https://www.fe-siken.com/kakomon/01_aki/q7.html
(1) <変数名> ::= <英字>
英字1文字は変数名である。
これにより A-F という英字1文字は変数名だと定義されます。
(2) <変数名> ::= <変数名><英数字>
変数名の右に英数字1文字を置いたものは変数名である。
左辺の<変数名>自体が右辺に含まれているので、右辺の<変数名>に(1)を適用するとこうなります。
(2a) <変数名> ::= <英字><英数字>
これにより「1文字目は 英、2文字目は 英数」という2文字は変数名だと定義されます。
(3) <変数名> ::= <変数名><英数字>
左辺の<変数名>自体が右辺に含まれているので、右辺の<変数名>に(2)を適用するとこうなります。
(入れ子の関係を理解しやすいよう丸カッコを付加しました)
(3a) <変数名> ::= (<変数名><英数字>)<英数字>
さらに、右辺の<変数名>に(1)を適用するとこうなります。
(3b) <変数名> ::= (<英字><英数字>)<英数字>
これにより「1文字目は 英、2文字目は 英数、3文字目は 英数」という3文字は変数名だと定義されます。
(4) <変数名> ::= <変数名><英数字>
右辺の<変数名>に(2)を2回、(1)を1回、適用するとこうなります
(4c) <変数名> ::= ((<英字><英数字>)<英数字>)<英数字>
これにより「英、英数、英数、英数」という4文字は変数名だと定義されます。
以上より、
<変数名> ::= <英字> | <変数名><英数字> を説明する日本語はこうなります。
「1文字の英字の後ろに 0回以上英数字が繰り返された文字列を、変数名と定義する」
https://www.fe-siken.com/kakomon/01_aki/q7.html
(1) <変数名> ::= <英字>
英字1文字は変数名である。
これにより A-F という英字1文字は変数名だと定義されます。
(2) <変数名> ::= <変数名><英数字>
変数名の右に英数字1文字を置いたものは変数名である。
左辺の<変数名>自体が右辺に含まれているので、右辺の<変数名>に(1)を適用するとこうなります。
(2a) <変数名> ::= <英字><英数字>
これにより「1文字目は 英、2文字目は 英数」という2文字は変数名だと定義されます。
(3) <変数名> ::= <変数名><英数字>
左辺の<変数名>自体が右辺に含まれているので、右辺の<変数名>に(2)を適用するとこうなります。
(入れ子の関係を理解しやすいよう丸カッコを付加しました)
(3a) <変数名> ::= (<変数名><英数字>)<英数字>
さらに、右辺の<変数名>に(1)を適用するとこうなります。
(3b) <変数名> ::= (<英字><英数字>)<英数字>
これにより「1文字目は 英、2文字目は 英数、3文字目は 英数」という3文字は変数名だと定義されます。
(4) <変数名> ::= <変数名><英数字>
右辺の<変数名>に(2)を2回、(1)を1回、適用するとこうなります
(4c) <変数名> ::= ((<英字><英数字>)<英数字>)<英数字>
これにより「英、英数、英数、英数」という4文字は変数名だと定義されます。
以上より、
<変数名> ::= <英字> | <変数名><英数字> を説明する日本語はこうなります。
「1文字の英字の後ろに 0回以上英数字が繰り返された文字列を、変数名と定義する」
2025.07.04 13:33
