スタックベースのプログラミング言語を実装することで、コンピュータープログラミングの知識を広げることに興味があります。pushint 1
値1の整数をスタックの一番上にプッシュし、「」のようなラベルを介してフロー制御を行う「」のような関数を使用することを意図しているため、どこから始めればよいかについてアドバイスを求めていますL01: jump L01:
。
これまでのところ、自分の言語をどのように動作させたいか(リンクしたいのですが、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