前回(Bisonで再入可能な構文解析器を作る(C言語版)) の続き。
続きを読む Flexで再入可能な字句解析器を作る(C言語版)
月別: 2013年9月
Bisonで再入可能な構文解析器を作る(C言語版)
前回作った電卓プログラムは、Bisonが吐き出した main.tab.c というCのコードをコンパイルしてリンクしています。
中を見ると、yyparse関数の中でグローバル変数 “yychar” を初期化したり、字句解析器によって切り出されたトークンを代入したりしているので、このyyparseは再入可能ではありません。つまり、スレッドセーフではないということになります。
(他にも、グローバル変数yylvalを介して 字句解析器とやりとりしてたりします。)
Bisonが再入可能なコードを吐くようにするやりかたは次の2つ。
- 再入可能なCのコードを出力させる
- C++のコードを出力させる
今回は1つ目の方法をとります。
続きを読む Bisonで再入可能な構文解析器を作る(C言語版)
久々にBison/Flex
簡単なDSLのスレッドセーフな構文解析エンジンを作る必要ができたので、いろいろ調べつつメモ。
構文解析器はBison、字句解析はFlexに作ってもらいます。
かなり昔に、”ぼくのかんがえたさいきょうのぷろぐらみんぐげんご”のソースを標準入力から読み込み、”ぼくのかんがえたさいきょうのぶいえむ”用のバイトコードを出力するプログラムを作ったことがあったので、Bison/Flex についてはなんとなく覚えています。
今回作るのは、
- ポートをLISTEN
- 接続を確立したらスレッド分岐
- 設計したDSLで書かれたプログラムを受信し、結果を送信する。
というものです。
ですので、構文解析エンジンは最低限次のことを満たす必要があります。
- 入力はファイルからではなく、文字列、文字バッファ、またはストリームから
- 出力はストリームに
- スレッドセーフ(再入可能)
サポートライブラリ版ActionBarにActionItemを追加する
3.0以降の標準のActionBar (android.app.ActionBar) を使うなら、
何も考えなくても従来通り onCreateOptionsMenu(Menu menu) でメニューをリソースから展開すればいいだけなのだけど、
サポートライブラリ版のActionBar (android.support.v7.app.ActionBar) だと 2.3以前のデバイスで見たときにこんな感じに。。
メニューキーを押すと出てくる従来型のメニューです。
アクションバーの上には表示されない。
Android 2.3 以下でもActionBar
ActionBarSherlock ではなくSDKについてくるサポートライブラリを使う方法。
続きを読む Android 2.3 以下でもActionBar