この問題は、「プログラム言語論」受講者(03t)用です。
(a|b)*abbという正規表現を認識する DFAの状態遷移表は次のようになる。
| AC | B | D | E | |
| a | B | B | B | B |
| b | AC | D | E | AC |
この状態遷移表を用いて、引数として渡された文字列が、正規表現 (a|b)*abbにマッチするならば 1をそうでなければ 0を返す関数 int ababb(char*)を定義せよ。
プログラムはこんな感じ
#include <stdio.h>
int table[?][?] = {?}; /* 遷移表を配列として表現 */
int ababb(char* str) {
?
}
int main(int argc, char** argv) {
int i;
for (i=1; i<argc; i++) {
char* str = argv[i];
if (ababb(str)) {
printf("%sは正規表現 (a|b)*abbにマッチします。\n", str);
} else {
printf("%sは正規表現 (a|b)*abbにマッチしません。\n", str);
}
}
return 0;
}
上の問題を解いて、プログラムを作成し、 またそれに対するレポートを作成して下さい。 (締切 12月 22日水曜日 18時)
レポートはワード(もしくは同等のワープロソフト)で作成します。 作成したソースファイルとレポートのファイルをオンラインで提出してください。 (ワード以外のワープロの場合は、RTF, PDF, PostScriptなど、そのソフトを持っていなくても読める形式に変換して下さい。) また同時に、レポートをA4用紙に印刷し、 ホッチキスで左上を綴じたものを学務係前のレポートボックスに提出してください。
オンラインの提出場所は
レポート作成上の注意
問題を数人で相談しながら解くのはもちろん構いませんが、 実行例とレポートは各自で作成してください。 実行例まで同一のレポートは不正レポートと見なします。