こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語のプログラム問題に対応するBNFの書き方がわかりません

C言語のプログラムからBNFにする方法を習っているのですが、どうしてもそのやり方がわかりません。
下にあるプログラムに対応するBNFを自分で作成してみたのですが、
<A>::=A|Bぐらいしかできませんでした。このBNFを作っても、なぜこうなるのかもわかりません。
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
enum symboltype{SMILE,HELLO,BYE,END};
void A();
void B();
void scan();
void error(char *msg);
enum symboltype next;
int main(int argc, char* argv[]){
scan();
A();
if(next != END) error("#PARSE ERROR#");
else puts("#PARSE OK#");
return 0;
}
void A(){
if(next != SMILE) error("#PARSE ERROR#");
else puts("#PARSE OK#");
return 0;
}
void B(){
if(next != SMILE){
scan();
return;
}else if(next != HELLO){
scan();
A();
if(next != BYE) error("#PARSE ERROR#");
scan();
}else error("#PARSE ERROR#");
}
void error(char *msg){
puts(msg);
exit(1);
}
void scan(){
char buff[10];
if(fgets(buff,10,stdin)==NULL){
next=END;
return;
}
if(strcmp(buff,"hello\n")==0) next=HELLO;
else if(strcmp(buff,"bye\n")==0) next=BYE;
else if(strcmp(buff,"(*_*)\n")==0) next=SMILE;
else error("#UNKNOWN TOKEN#");
}
このプログラムに対応するBNFを教えてほしいんです。
お願いしますm(_ _)m
また、BNFはどのように書くのかも教えていただけませんか。

投稿日時 - 2009-02-08 23:07:46

QNo.4701108

すぐに回答ほしいです

質問者が選んだベストアンサー

BNFを考える前に、提示されているプログラムが受け付ける記号列が具体的にどんなものか分かりますか?
頭の中で考えても分からなければ、実際にこのプログラムを実行して試してみましたか?
残念ながら、このプログラムはどんな入力をしても #PARSE ERROR# か #UNKNOWN TOKEN# を表示して終了するはずです。

> qa4701108.exe
hello
#PARSE ERROR#
> qa4701108.exe
bye
#PARSE ERROR#
> qa4701108.exe
(*_*)
#PARSE OK#
#PARSE ERROR#
> qa4701108.exe
abc
#UNKNOWN TOKEN#

なので、「このプログラムに対応するBNF」はありません。

投稿日時 - 2009-02-13 21:00:36

お礼

いえ、頭で考えてもわからなかったので
プログラムを実行してみたんですが、どうも結果がおかしかったので
必ずPARSEOKになるはずなので、どうしてもわかりませんでした。

それと、教えていただいて申し訳ありませんが、解決しました。

後で、知人に聞いてみたところ複数のデータを入力するんです。
(*_*)
(*_*)
のようにするのですから、わからなかったのです。

私の至らなさが足りないばかりに皆さんにご迷惑をおかけしました。
そして、ご協力いただいてありがとうございました。

投稿日時 - 2009-02-16 18:53:09

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

や, だから,
「C言語のプログラムからBNFにする方法を習っている」
んだよね? だとしたら, 「あなたに教えている人がいる」はずでしょ? なんでその人に聞かないのかってのが「最大の疑問」として挙げたこと.
ちなみに「なんか違う」と思ったら「どこがどう違うと思ったのか」をなるべく書くようにしてください. じゃないと, 同じことを繰り返すことになりかねない.
で「プログラムに対応する BNF」とは何?

投稿日時 - 2009-02-12 19:42:28

補足

そういう意味でしたか。

ご迷惑をおかけして誠に申し訳ございません。

投稿日時 - 2009-02-16 18:53:34

ANo.1

http://oshiete1.goo.ne.jp/qa4700530.html
とはどこが違うの?
「プログラムに対応する BNF」とは何?
そして最大の疑問なんだけど, 教えている人に聞かないのはなぜ?

投稿日時 - 2009-02-09 00:27:16

補足

問題自体は一緒ですが、プログラムとしてどこかおかしくても、そのまま作ってほしいんです。
どうも、うまく説明できなくてすみませんm(_ _)m

その最大の疑問ですが、もうこれでいいかなと思い、質問を締め切ってしまったんです。
やってみて、なんか違うなと思ってしまったので、新たに投稿したんです。
これを利用するのは初めてなので、質問を締め切ってしまったから、もう質問できないと思ったので、新しく作ったのです。

投稿日時 - 2009-02-11 13:52:37

あなたにオススメの質問