我有兴趣通过实现基于堆栈的编程语言来扩展我的计算机编程知识。我正在寻求关于从哪里开始的建议,因为我打算让它具有像“ pushint 1
”这样的函数,它将一个值为 1 的整数推到堆栈的顶部,并通过像“ L01: jump L01:
”这样的标签进行流控制。
到目前为止,我已经实现了我希望我的语言行为的 C# 实现(想要链接到它,但 IDEOne 被阻止),但它非常混乱,需要优化。它将输入转换为 XML,然后对其进行解析。我的目标是使用较低级别的语言(可能是 C/C++),但我的问题是实现一个可以容纳各种数据类型并且没有固定大小的堆栈。
最终我还想实现数组和函数。此外,我认为我需要一个更好的 Lexer,我想知道解析树对于这种简单化的语言是否是一个好主意。
欢迎任何建议/批评,并请考虑到我对编程仍然相当陌生(我刚刚完成了 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