とりあえず適当にやってみたところ、ソースの内容にかかわらず常に"syntax error"と表示されるコンパイラが出来上がりました。
bison用のソース
► スポイラーを表示
とにかく今は眠くて仕方がないので寝ます。
これが解決できたら、一度flexを使ってみるつもりです。
それにしても、これはコンパイラと呼べるのだろうか?
そんなわけで、みなさんもぜひ良いプログラミングライフを!
ざらっと見ただけですが。MoNoQLoREATOR さんが書きました:世界中のほぼ全てのコンパイラがそうであるように、ファイルからソースを受け付けるように改変して…みようとしました。
とりあえず適当にやってみたところ、ソースの内容にかかわらず常に"syntax error"と表示されるコンパイラが出来上がりました。
まず、デストラクタは呼ばれません。 と、言うよりも assert() に引っかかる時点で、プログラムとして正しい振る舞いではありません。MoNoQLoREATOR さんが書きました:私はassertを使わない派です。
強制終了時の動作が不確定(少なくとも私には知識が無い)で、全てのオブジェクトのデストラクタが呼び出されるかどうか、私にはわからないからです。
それに、私には利点が見出せません。
意味合いによる可読性ですか?
if文による場合分けよりも、どのような点で適切なのですか?
スタイリッシュでは無いと言われれば、感性の問題ですので、何も言えませんが。MoNoQLoREATOR さんが書きました: 私はNULLマクロを使わない派です。
理由は、NULLが宣言されているヘッダファイルをインクルードするかもしくは自分でマクロ定義する必要があり、スタイリッシュではないからです。
また、今回はbisonの仕様が不確定(少なくとも私には知識が無い)で、NULLマクロを使用する前にインクルードやマクロ定義が完了する保障があるかどうかわからなかったこともありますし、なによりNULLマクロによる弊害もあるため使用しませんでした。
というより、使用しない”べき”でしょう。
さらに、その代わりに/*null_ptr*/というコメントを入れています。
これによって、「著しく可読性が下がる」という事態は防いでいると言えると私は考えています。
調べてみると、C++11からはnullptrというキーワードが定義されたのですね。
私は以後これを使うことにします。