这个问题是关系到如何设计和实现编程语言?
过去几年我一直在思考的事情,我喜欢和不喜欢我使用的语言。我一直想写我自己的语言,但从来没有这样做。
我也同时拥有乐高RCX和NXT,但大部分的时间,我从来没有真正让我的机器人这样做,因为他们的限制性的可视化编程环境的东西。
我想我会为NXT设计我的编程语言,因为已经有很多通用语言,而且NXT给了我一个具体的问题和目标,并希望有一个很好的沙盒可以玩。
现在呢?我从哪说起呢?我需要知道什么?
如果可能,我会用Python或Clojure编写编译器。有一个SDK for the NXT,但也是一个Assembly language。什么是最好的/最简单的路线?
乐高NXT有一个小屏幕,USB和蓝牙,它有4个传感器端口数字和模拟,3个输出口和2个ARM处理器,一个主处理器和一个协处理器。 http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick.html
编程NXT是要所有的有关处理数据和事件,所以某种monoiconic数据流的/无功风格似乎是适当的。它也应该处理并行任务,所以我在思考功能。我目前也在考虑基于堆栈。
在我的脑海,我已经在努力统一这些概念,并认为的示例代码。我正在考虑一个树而不是堆栈,其中功能分支可以并行运行。举个例子:
# implicit main stack
5 5 +
# 10
# quoted branch or list
[1 -]
# 10 [1 -]
# eval list and recur until false
loop
# [9 8 7 6 5 4 3 2 1 0]
# define stack as a function
[1 = [1 8 motor] [1 0 motor] if] fn
# [9 8 7 6 5 4 3 2 1 0] <function>
# define function as a symbol
"handle-press" def
# [9 8 7 6 5 4 3 2 1 0]
# reactively loop over infinite lazy stack returned by sensor
# in a parallel branch
|4 sensor handle-press for|
# [9 8 7 6 5 4 3 2 1 0] [8 nil nil nil 8 ...]
有明显仍然张开在这背后的原因洞,但我无论如何张贴此草图引发一些有用的答案和讨论。
[学习写一个编译器]的可能重复(http://stackoverflow.com/questions/1669/learning-to-write-a-compiler),http://stackoverflow.com/questions/453870/suggestions -for-writing-a-programming-language,http://stackoverflow.com/questions/426239/parsers-and-compilers-for-dummies-where-to-start?lq=1,http://stackoverflow.com /问题/ 365602 /创建你自己的语言? – nawfal 2014-07-23 07:31:09