从头学习compiler系列2——COOL语言学习1

本文从头介绍COOL语言,涵盖了类结构、特性如函数和属性、继承、类型系统、表达式、基础类以及Main Class等内容,为学习编译器打下基础。
摘要由CSDN通过智能技术生成
        
    Cool语言是一个面向对象的语言。虽然比较小型,但也包含了许多现代语言的特性,如对象、强类型和自动化内存管理。如果你之前熟悉c++、java等面向对象语言,那么会很容易上手。
    学一门新语言,最急迫想知道的就是,如何编写“hello world”程序,下面就来尝个鲜。
    class Main inherits IO {
       main(): SELF_TYPE {
        out_string("Hello, World.\n")
       };
    };
    打眼一看,外形很像java,其实意思也很相近了。下面我来细细详谈。全文大部分翻译cool语言手册。
 

1,类结构 classes

    一个Cool程序是由许多的类组成,每个类的定义必须在一个源文件里。但是多个类可以定义在一个源文件中。类的形式:
    class <type> [ inherits <type> ] {
        <feature_list>
    };
    <type>代表类名,[]里的内容是可选项。{}内是feature集合。所有类名都是全局可见的。类名是以大写字母开头的字符串。类不能重复定义(不能有两个类名字相同)。
    “hello world”例子,就只有一个类,名字是Main。
    

2,features

    feature也就是我们说的函数和属性的统称。一个类是由数个features组成。
 

    2.1 函数 methods

    函数结构如下:
    <id> ( <id> : <type> , ... , <id> : <type>) : <type> { <expr> }
    <id>是标示符,也就是名字。<type>是类型。<expr>是表达式。()里面是函数的形参定义。例如:
    add ( a   :  Int, b : Int ) : Int {
        a + b
    }
    add是函数名,a和b是参数名字,":"后跟着的是参数的类型。") :"后跟着的是返回类型。{}里面就是函数内容,也就是表达式组成。表达式后面会讲到。
    类函数是外部可见的,也就是外部可以调用类的任何函数。        
    函数参数可以有1个或更多,也可以没有,并且参数的名字不能相同。函数的返回值必须明确给出。如果参数的名字和类属性名字相同,那么就会隐藏掉类属性。也就是说在这个函数里,参数和类属性名字相同,那么同名用的都是参数。

    2.2 属性 attributes

    属性结构如下:
    <id> : <type> [ <- <expr> ];
    <id>是属性名,<type>是属性类型。[]是可选的,属性的初始化。也就是把<expr>表达式的值赋给<id>。例如:
    class A {
        x : Int <- 1;
    }
    类A有一个属性为Int型的x,初始化为1。
    初始化操作是在新建立一个类的对象的时候进行。在一个类内,属性初始化的顺序就是定义的顺序。类属性是局部变量,是类私有的。外部不能直接访问类的属性,只能通过函数去修改值。这也体现了现代OO语言的封装性。
    所有的属性,如果没有指定初始化,那么默认初始为void。void类似于c语言里面的NULL,或者java里的null。不过在Cool语言里没有void的定义。唯一一个创建void值得方法就是在某个类里建立一个变量,除了Int,String,Bool类,并让这个void初始化,或者保存while循环的结果。有一个表达式isvoid expr,用来判断expr的值是不是void(会在之后表达式里讲到)。
    基础类Int,Bool和String的属性定义和初始化是特殊的,会在后面基础类里讲到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值