このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/543
#  どなたかお願致します。(問題文にある ”状態遷移図を作れ” は無視してもらって結構です) 
#   
#  [1] 授業単元: ソフトウェア設計法 
#  [2] 問題文 
#   
#  Cのソ-スプログラムを読んで、コメント(/* と */で囲まれた文字列)だけを取り出すプログラムの状態遷移図 
#  を作れ。このとき、文字列(" と "で囲まれた文字列)中の/* や */はコメントにならないことに注意すること。 
#  さらに、コメント中の文字列は文字列にならない。この状態遷移図をもとに、制御のデータ化を使ったプログラムを作れ。 
#   
#  ※実行例、図などは記載されていませんでした 
#   

'Cのソ-スプログラムを読んで、コメント(/* と */で囲まれた文字列)だけを取り出す。このとき、文字列(" と "で囲まれた文字列)中の/* や */はコメントにならないことに注意すること。さらに、コメント中の文字列は文字列にならない。'(File) :-
        get_chars(File,Chars),
        'コメント(/* と */で囲まれた文字列)だけを取り出す'(Chars,_コメントならび).

'コメント(/* と */で囲まれた文字列)だけを取り出す'([],[]) :- !.
'コメント(/* と */で囲まれた文字列)だけを取り出す'(['/','*'|R1],[_コメント|R2]) :-
         append(L0,['*','/'|R3],R1),
         \+(append(_,['*','/'|_],L0)),
         \+(append(_,['/','*'|_],L0)),
         concat_atom(L0,_コメント),
         'コメント(/* と */で囲まれた文字列)だけを取り出す'(R3,R2),!.
'コメント(/* と */で囲まれた文字列)だけを取り出す'(['"'|R1],R2) :-
        append(L0,['"'|R3],R1),
        \+(append(_,['"'|_],L0)),
        'コメント(/* と */で囲まれた文字列)だけを取り出す'(R3,R2).
'コメント(/* と */で囲まれた文字列)だけを取り出す'([_|R1],R2) :-
        'コメント(/* と */で囲まれた文字列)だけを取り出す'(R1,R2).