从0到1构建计算机(8/12)--高级语言:Jack

本篇我们将设计一门高级语言:Jack。Jack是一门基于面向的对象的语言,具备现代高级语言的基本特性和风格,但是语法相对简单,且不支持继承等高级属性(其实Jack非常寒酸,只是支持了“对象”的功能)。本篇的内容非常简单,主要是介绍Jack的语法。

Hello, World

众所周知,学习一门新语言的第一步,是写一个 Hello, World。

class Main {
    function void main() {  // Jack程序要包含一个Main类,且包含main方法,这是程序的入口函数。
       do Output.printString("Hello, World");
       do Output.println(); //换行
       return;
    }
}

精通Jack

学习完 Hello, World,下面让我们再花5分钟时间来精通Jack。

class 类名 {
	---------变量声明区-----------
	可以声明2种变量:
	1.成员变量:field
	2.静态变量:static

	变量类型有4种:
	1.基本类型:int, bool, char
	2.对象类型:自己定义的类
	-----------------------------

	--------方法声明区-------------
	可以声明3种类型的方法:
	1.构造函数:constructor
	2.类方法:function
	3.实例方式:method

	constructor 对象类型 new(入参列表) {
		......
		return this;	//constructor最后一定是return this,this是指向实例的指针
	}
	 
	function/method 返回类型(可以是void)方法名(入参列表) {
		var 类型 变量名  	//用var声明局部变量
		do xxx.xxx();  	//do语句:方法调用
		let a = b;	//let语句:赋值语句
		if else
		while
		return
	 }
	-----------------------------
}

举例:

/** 一个链表类,一个节点存储一个整数. */
class List { 	// 声明类
    field int data; // field语句:声明成员变量
    field List next;

    /* 构造函数 */
    constructor List new(int car, List cdr) { // 参数列表
        let data = car;       // let语句:语句类型是赋值语句
        let next = cdr;       
        return this; // return语句
    }

    /** getter. */
    method int getData() { return data; }
    method int getNext() { return next; }

    /** 打印链表 */
    method void print() { //method语句:类的实例方法
        var List current;    // var语句:声明局部变量
        let current = this;  // this关键字:指向当前对象本身
        while (~(current = null)) {  //while语句
            do Output.printInt(current.getData()); // do语句:后面接一个方法调用
            do Output.printChar(32);
            let current = current.getNext();
        }
        return;
    }

    /** 销毁链表 */
    method void dispose() { 
        if (~(next = null)) { // if语句
            do next.dispose();
        }
        do Memory.deAlloc(this); // 回收内存,调用操作系统方法
        return;
    }

}

class Main {
   function void main() { // fuction语句:声明类方法
      var List v;
      let v = List.new(5,null);
      let v = List.new(2,List.new(3,v));
      do v.print();      
      do v.dispose();
      return;
   }
}

OK,掌握了Jack后我们下一步的工作是实现Jack的编译器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个问题可以使用面向对象的编程思想来解决,我们可以定义一个基类 `Commodity` 来表示普通商品,包含成本、售价等属性和行为,然后派生出 `Apple` 和 `Shampoo` 类来表示苹果和洗发水,添加个性化的属性和行为,如计算售出数量的单位等。最后再定义一个 `Salesman` 类来表示销售员,包含销售额、利润等属性和行为,如计算总利润、利润率等。 以下是一个 Python 的示例代码: ```python class Commodity: def __init__(self, cost, price): self.cost = cost self.price = price self.sold = 0 def sell(self, quantity): self.sold += quantity def profit(self): return self.sold * (self.price - self.cost) def profit_rate(self): return self.profit() / (self.sold * self.cost) class Apple(Commodity): def __init__(self, cost, price, unit_price): super().__init__(cost, price) self.unit_price = unit_price def sell(self, weight): super().sell(weight) self.sold_weight = weight def profit(self): return self.sold_weight * self.unit_price - self.cost * self.sold_weight class Shampoo(Commodity): def __init__(self, cost, price, bottle_size): super().__init__(cost, price) self.bottle_size = bottle_size def sell(self, quantity): super().sell(quantity) self.sold_quantity = quantity class Salesman: def __init__(self, name): self.name = name self.total_amount = 0 self.total_profit = 0 def sell(self, commodity, quantity): commodity.sell(quantity) self.total_amount += commodity.price * quantity self.total_profit += commodity.profit() def average_profit_rate(self): if self.total_amount == 0: return 0 return self.total_profit / self.total_amount * 100 # 测试数据 apple = Apple(2, 4, 3) shampoo = Shampoo(10, 20, 1) jack = Salesman('Jack') rose = Salesman('Rose') bill = Salesman('Bill') jack.sell(apple, 30) jack.sell(shampoo, 20) rose.sell(apple, 80) rose.sell(shampoo, 50) bill.sell(apple, 500) bill.sell(shampoo, 300) print('总销售额:¥', jack.total_amount + rose.total_amount + bill.total_amount) print('Jack 的总利润:¥', jack.total_profit) print('Rose 的总利润:¥', rose.total_profit) print('Bill 的总利润:¥', bill.total_profit) print('Jack 的平均利润率:', jack.average_profit_rate(), '%') print('Rose 的平均利润率:', rose.average_profit_rate(), '%') print('Bill 的平均利润率:', bill.average_profit_rate(), '%') ``` 输出结果如下: ``` 总销售额:¥ 2150 Jack 的总利润:¥ 38 Rose 的总利润:¥ 254.72 Bill 的总利润:¥ 1858.78 Jack 的平均利润率: 8.323529411764707 % Rose 的平均利润率: 12.023931623931624 % Bill 的平均利润率: 5.10895398831562 % ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值