[359] Re:「プログラミング言語を作る」
投稿者:緒方
2007/02/20 02:13:25
>>>・制御構文はとりあえずifとgotoのみ(とほほ・・・)
>>>・他の制御構文はifとgotoで実装してライブラリ提供
>>
>> どのような形式で実行する言語を想定しておられますでしょうか。
>
>むむっ、実はあまり考えていません。あれこれ空想する際には、アセンブリのイメージで考えていて、無条件ジャンプと条件ジャンプがあればとりあえず事足りるかな、という風に思って上記のように書きました。
実装を始めて気がついたのですが、goto文って実はもっとも単純だと思っていたのですが、実は難しいのですね。
今はソースを読み込んだら即構文木を作って評価するインタープリタを作っているのですが、今のインタープリタにgoto文を実装するとすると、上方向にジャンプする場合も下方向にジャンプする場合も、入力ストリームをラベル位置まで巻き戻したりスキップしたりしなければなりません。BASICのgoto文ってどういう実装になっているか調べてみようかと思っています。
>>>b, a = a, b #スワップ
他にも難しい実装に気がつきました。Ruby のように文の区切り文字を省略させたいのですが、これがまたかなり難しいです。Ruby だと
1 + 2 # 1+2 と評価される
1 # 1 と評価される
+ 2 # +2 と評価される
1 # 1 と評価される
+ # この時点では式が継続するものと予測されるので評価しない
2 # 上の行と合わせて +2 と評価される
1 + # そういえばこのケースは試してないですが、
2 # 多分 1+2 と評価されるのでは?
というように、状況に応じて改行を文の区切り文字と認識したりあるいは無視したりしています。Ruby では Lex などの字句解析機を使わずに自前の実装を使われているそうなので、ありものの字句解析機を利用しなかったのは、利用できなかったからなのでは?と勝手に想像しています。
というのも、上記のような改行仕様を flex で実装しようとしたところ、状態遷移だけでかなり複雑になってしまい、私ではお手上げでした。