LLVMによるプログラミング言語の実装チュートリアル日本語訳
第5章 万華鏡: 言語の拡張: 制御フロー
第2節 if/then/else
if/then/elseのサポートによる万華鏡の拡張は、実に簡単である。
基本的には、字句解析器と構文解析器とASTとLLVMコード生成部分に対して、これらの新しいコンセプトに対するサポートを追加することが必要である。
この実例は素晴らしいものである。
なぜなら、新しいアイデアによって言語を少しずつ拡張し、時間を掛けて育てていくのがいかに簡単かを示すものだからである。
この拡張を追加する方法に進む前に、何が必要なのかについて考えてみよう。
以下のような感じで書けるようにしたいというのが基本的な考えである。
def fib(x) if x < 3 then 1 else fib(x-1)+fib(x-2);
万華鏡では、各構成物は式である。
文は存在しない。
なので、if/then/else式は何らかの戻り値を返す必要があある。
大部分は関数の形を使ってるので、その条件文を評価し、そして条件がどう解決されたかに基づき”then”か”else”の値を戻すようにする。
これは、Cの”?:”式にかなり似ている。
訳注: ?:はCの三項演算子の事。
if/then/else式の動作としては、条件式において、0.0と等しい値を真偽値におけるfalseとして評価し、それ以外をtrueとして評価する。
もし条件がtrueなら、最初の副次式(thenの式)が評価されその結果が返る。
もし条件がfalseなら、2番目の副次式(elseの式)が評価されその結果が返る。
万華鏡は副作用を許容するので、この振る舞いは明確に定義するために重要である。(Since Kaleidoscope allows side-effects, this behavior is important to nail down.)
訳注: 副作用を許容しないならば、thenとelseの両方の式を実行して必要なほうの値だけを返すようにすることも出来るが、副作用を許容するのでそうは出来ないという意味かと思う。
これで、我々が欲しい物ははっきりした。
これを個々の構成部品に分解してみよう。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…