はじめに
以前、↓ のように書けるプログラミング言語を開発しました。
「でも、せっかく見やすいのに、全角文字が入ると表示が崩れるやん!」
「罫線文字って、場合によって全角か半角かが変わるんだぞ?」
対応しました。
新しいコンパイラオプション
この章は機種やフォントの設定によって大きく表示が違います。2つパターン(Half
と Full
)があるので、「一番キレイに見えるプログラム」 の方を見ていただければ。
Half
さて、例えば、以下のTreesコードは正しくコンパイルされます。(そして、「こんにちは!世界!」を出力します。)
┌───────┐
│println│
└──┬────┘
┌─┴─────────┐
│"こんにちは!世界!"│
└───────────┘
でもこれはあんまりキレイじゃないですね?以下のように書きたいです。
┌───────┐
│println│
└───┬───┘
┌──┴─────────────────┐
│"こんにちは!世界!"│
└────────────────────┘
コマンドに --char-width
オプションを渡せば、このプログラムもコンパイルできます!
> trees --char-width half "./helloworld_half.tr"
Full
上記に加えて、罫線も全角で表示されていたらどうでしょう?
┌────┐
│println │
└──┬─┘
┌──┴───────┐
│"こんにちは!世界!"│
└──────────┘
--char-width
オプションにfull
を渡せば、このプログラムもコンパイルできます!
> trees --char-width full "./helloworld_full.tr"
どうやって全角か半角か決めてるの?
Unicode には、全角表示か半角表示かを決定する附則があります。これを参考にしています1。
(全角、半角のリスト):
終わりに
文字の全角半角のことを全然知らなかったです。こんな風に決まってたんですね。
さて、Trees の GitHubリポジトリを貼っておきます。
以上です。以下はおまけです。
補足:文字幅が異なるプログラムがごっちゃになるが~?
前の記事で、「Treesはインタプリタ言語で、ソースコードを直接実行するよ」と言いました。であれば、次の疑問が出てくるのは当然です。
「結局文字コードを統一しなければいけないじゃん」...と。
↓
実は、この問題に対応するため、すでに Trees は、Javaめいた中間コードを生成して実行するようになっています!2
以下のコードはコンパイル結果の中間コード(*.trm
)を出力します
> trees -m compile <ソースコードファイル>
ーそうして、プログラム内部で、こうして生成された*.trm
を利用できます。3
補足は以上です。