ALDialogやALSpeechRecognitionで言葉を読み取った時、不思議なことは、一致した言葉をBNFファイルの内容に対応させれば、topicファイルなどに書かれているそれに対するリアクションの言葉の内容がすぐに探し出せるのに、それをせずに、あらためてtopicファイルの中のruleに戻って調べなおしていることだ。こんな面倒なことをする理由がわからない。
たとえば、BNFファイルに、
<r410>:((やすみなさい)|(すわりなさい));
というトリガー(rule)があったとして、ろぼっとが「やすみなさい」という言葉を認識したとする。もちろん、この行があって認識できたのである。しかし、このトリガーとしての<r410>が情報として出されていれば、topicファイルのどの行に対応しているかはすぐわかるはずだ。わかるようにプログラムを組むことができるはずだ。それをしていないのである。ログを見ている限り、もう一度topicファイルから調べ直している。
理由はわからない。BNFをコンパイルしたlcfファイルがらみなのかもしれなない。
だから、自前のDialogでは、これを直接捉えたいと思った。ただ、bnfファイルは、プログラミング構文に使われる文法なので、使うためには構文解析アルゴリズムを使わなければならない。ただし、普通の数式処理構文解析プログラムならば、たくさんサンプルが出ていて、わかりやすく解説されているが、bnfを通してある言葉を認識し、それがbnfのどの構文に一致したのかを理解するアルゴリズムは、サンプルがない。もしかして誰もやっていない。
なので、1から作らなければならない。再帰下降構文解析法を応用しようと思っている。できたらここに掲載するつもりだが。できるのか。だいぶできているが複雑。