我是个讽刺编程新手。我正在研究的第一个测试示例是计算数学形状(面积、体积、.)
在简单的模式下,它工作得很好。但挑战是,我想让它成为可选的。例如,如果我选择圆形作为形状,那么我只需要半径。另外,如果我选择矩形作为形状,我需要高度和宽度。所以,我想知道当形状是圆的时候,如何得到一个数作为半径,当形状是矩形的时候,如何得到2到3个数。
var program = new NonTerminal("program");
var shapeType = new NonTerminal("shapeType");
我习惯于使用函数式编程(主要是Haskell),现在开始使用OO (scala)。
我在翻译我的代码时遇到了麻烦。例如,这是我对B树的Haskell定义:
data BTree a =
Leaf
|Node2 (BTree a) a (BTree a)
|Node3 (BTree a) a (BTree a) a (BTree a)
deriving (Eq,Read,Show)
这很简单。我的树是空的,或者它有一个值,是两棵树的父亲,或者是三棵子树的父亲。
OO上是什么?毫无线索。我就是想不出怎么才能用理智的方式去做。
我对在C上开发自己的编程语言很感兴趣,但我不知道从哪里开始。
所以,我研究过,这引起了我的注意:
A lot of languages are C-based.
流行的编程语言,如C++和Objective,可能还有C#和Java都建立在C之上(更别提Python了)
C++和object创建者是如何创造出一种新的基于C的语言,但是添加了面向对象的编程概念呢?
我正在用Java为x86-32 (IA32)处理器构建一个针对Windows的编译器/汇编程序/链接器。
高级概念(我没有任何“源代码”:没有语法或词法翻译,所有语言都是规则的)被翻译成操作码,然后包装并输出到一个文件中。翻译过程有几个阶段,第一个阶段是普通语言之间的转换:最高级别的代码被翻译成中等级别的代码,然后被转换成最低级别的代码(可能超过3个级别)。
我的问题是:如果我将较高级别的代码(X和Y)转换为较低级别的代码(x、y、U和V),那么这种转换的一个例子就是伪代码:
x + U(f) // generated by X
+
V(f) + y // generated by Y
(一个