Smartphoneほんまにコメントほしい機械学習やめました。自作コンパイラからやってやろうと思いました。ちなみに、ひと昔話題になったbrawnのような自作言語においてyaccとlexというものが関係しているらしいです。今回はとりあえずそれらを動かしてみます。字句解析と構文解析いきなりですが疑問としてコンピュータがどうやって我々の入力を理解しているか?がありますよね。僕たちは日本語でも英語でもなんでもいいんですけど会話するときに主語は、、動詞は、、みたいに考え無いですよね。コンピュータくんはそうはいかないですよね。そこでコンピュータに文法を教えよう、的なイメージがこの記事の格です。これを自動生成してくれるのがlexです。パーサ(parser)と呼びます。yaccはこれを自動生成してくれるプログラムです。yaccLexの例とりあえず見てください。character\n");%%左に正規表現、右にその対応を書きます。Wordのようになります。Lexについてこれだけでわわからないので一歩づつまとめます。Lexのファイルは.lの拡張子で次のようなルールがあります。...まあルールのところに色々書くと思うんですけど、わからなければはじめはルールの部分だけとりあえず気にかけておけばいいと思います。actionという形で書きます。この際にパターンには正規表現を使います。2ちなみにですが環境によってはコンパイルに次が必要になるときがあるそうです。検出されるときに呼び出されます。戻す場合、解析は停止しますもちろんこの他にもlexには予約語があります。Variablesまあlexだけでは全然イメージわかないと思います。気にせずとりあえず読み進めてください。0;}なんか一気に難しいですよね、、、いやぁ難しい、泣けるYaccについて前述通りlexによってできたトークンを用いて構文解析を行うのがyaccです。(BNF)というグラマーらしいです。yaccファイルである.yの定義部ではトークンを定義することが可能です。621トークンを定義すると自動的にナンバーが割り振られるようですが上のように明示的に与えることも可能です。yaccにはシンボルというものがあります。}$$は構文規則の左辺、$nは右辺の各トークンをあらわしています。この場合だとexpression1が$1でexpression1が$3です。ちなみに右辺はcもかけます。具体例ここまででくそわからないと思うのは僕だけですか?まじでわからない。最近寒くなってきたのでyaccとlexを使ってエアコン用のコンパイラでも作りましょう。;includeのところとりあえずincludeしてください。c言語知らないのでなんのためにあるのかよくわからないです。yyerrorのところエラー処理的なやつです。これから定義する文法以外の入力に対するエラー処理です。yywrapのところ前述通りあった方がいいやつです。コンパイルの関係でいるらしいです。mainのところyyparse()で構文解析しよう!的なやつです。エラーだと1を返すようです。%tokenのところトークンの定義です。これはあとで書くlex用だと思ってください。ようはプログラムを書くときの変数的なやつです。TOKTARGETコマンドの引数の一つ的なイメージこれだけだとわからないので下で書くlexと照らし合わせてみてください。commandsのところここが根幹と言っても過言では無いです。使いたいcommandを定義します。ここではheat_switchとtarget_setの二つの自作関数(的なイメージ)を作りました。heat_switchのところここで自作関数heat_switchの詳細を定義します。TOKHEATが実際のコマンドでSTATEはその引数的なイメージです。$2はSTATEをさします。target_setのところ自作関数target_setの詳細を定義します。$3はNUMBERをさします。lexこっちは簡単です。;%%includeのところとりあえずincludeしてください。y.tab.hはyaccの出力ファイルです。これが必要になるのでまずyaccから説明しました。NUMBER;前述の温度に当たるとこです。atoiで入力値をyylvalに格納してます。TOKHEAT;前述のheat_switchのコマンド名にあたります。STATE;heat_switchのコマンドの引数にあたります。strcmpはc言語の関数でcompareしてます。TOKTARGET;前述のtarget_setのコマンド名にあたります。TOKTEMPERATURE;target_setのコマンドの引数にあたります。実行これでもわからないかもしれません。YYLEX;僕の環境では上のようになりましたが気にせず。errortimer%おーー、なるほど。感想まあ基礎の基礎の基礎くらいしか触って無いのでなんともいえないです。Adventar初参加でした。一方で皆さんの為になる記事が書けなくてすいません。