私はスタックベースのプログラミング言語を実装してコンピュータプログラミングの知識を広げることに興味があります。スタックの先頭に値1の整数を、「L01: jump L01:
」のようなラベルでフロー制御をプッシュする「pushint 1
」のような機能を持つことを意図しているので、どこから始めるべきかアドバイスを求めています。シンプルなスタックベースのプログラミング言語を実装するにはどうすればいいですか
これまでのところ、私は自分の言語のように動作させたい(IDEOneはブロックされていましたが)、C#の実装を行っていますが、非常に面倒で最適化が必要です。入力をXMLに変換して解析します。私の目標は低レベルの言語(おそらくC/C++)に行くことですが、私の問題はさまざまなデータ型を保持できるスタックを実装しており、固定サイズではありません。
最終的には、配列と関数を実装したいと思います。さらに、私はより良いレクサーを持っている必要があると思うし、そのような単純化された言語のために解析木が良いアイデアになるのではないかと思っています。
アドバイスや批判は歓迎されています。まだプログラミングにはまだ合っていないと考えてください(私は最近AP CompSci Iを完了しました)。また、オープンソースのスタックベースの言語へのリンクも歓迎しています。ここで
は私がしようとすると解釈/コンパイルしたい基本プログラム([this is a comment]
)です:
[Hello World!]
pushchar '\n'
pushstring "Hello World!"
print
[Count to 5 and then count down!]
pushint 1
setlocal 0
L01:
pushchar '\n'
getlocal 0
print [print x + '\n']
getlocal 0
increment
setlocal 0 [x = x + 1]
pushint 5
getlocal 0
lessthan [x < 5]
iftrue L01
L02:
pushchar '\n'
getlocal 0
print [print x + '\n']
getlocal 0
decrement
setlocal 0 [x = x - 1]
pushint 0
getlocal 0
greaterthan [x > 0]
iftrue L02
予想される出力は次のようになります。
Hello World!
1
2
3
4
5
4
3
2
1
あなたの新しいプログラミング言語の構文は、[tag:REBOL]プログラミング言語の構文と非常によく似ています。 –
@AndersonGreenこの構文は、実際にはAdobe ActionScript Virtual Machine 2(AVM2)のオペコードに基づいていました。 Rebolはおもしろそうだね! – Wingpad