HobbyScript: 实验性的语言编写

1,251 阅读1分钟
  • 2016.7.12 初次更新

    完成了基础的词法分析,很不好意思,使用了正则表达式,现在能够辨别词素有字符串,ID,整形,和双精度的浮点型,因为打算做弱类型语言,所以数字类型的选择是通过自动判断的。

  • 2016.7.14 文本段的解释器写完了

    能够运行定义的代码了。

    num = 0;
    i = 1;
    
    while (i < 10){
      if (i % 2 == 0){
              num = num + i;
      }
    
          i = i + 1;
    }
    num;

    类似这样的代码。

  • 2016.7.16 增加了for语句,break语句,增加了函数调用。

    function fib(n){
         if (n < 2){
             n;
         }else{
             fib(n - 1) + fib(n - 2);
         }
    }
    
    fib(10);

    支持诸如此类的代码。

​ 昨天的时候,我写了一个小的彩蛋,使用GraphViz的JavaAPI去绘制运行代码的AST树,下面有一些示例,其余保存在src/HobbyScript/Tmp/中。

for

fib

  • 2016.7.17 试着增加了一下闭包函数 现在有点混乱

    修改了一下,目前是能用了,能运行诸如以下的使用了闭包的代码。

    i = 0;
    lfkdsk = closure(n){
          n = n + 100;
    }
    lfkdsk();
    lfkdsk();

    closure

  • 2016.7.22 现在完成了 OOP的初次封装,支持了两种构造函数。

    i = 301;
    
    class lfkdsk {
        Ss = i;
    
        function Initial(x){
            Ss = i;
        }
    
        Ssdut = closure(){
            Ss = 1000;
        };
    }
    
    class lfk extend lfkdsk {
        function Lfkddd(){
            super.Ssdut();
        }
    }
    
    lfi = lfk.Initial(200);
    
    logInfo(lfi.Lfkddd() + "  " + lfi.Ss);

    oop

  • 2016.7.23 修改了几个环境的bug,类能够很简单地表示链表等数据结构,这就有了很多的可能性。

class Node {

    value = 0;

    next = 0;

    function Initial(v){
        value = v;
    };

    function GetV(){
        value;
    };

    function SetV(v){
        value = v;
    };

    function SetN(n){
        next = n;
    }

    function GetN(){
        next;
    }
}

firstNode = Node.Initial(0);

secondNode = Node.Initial(" fuck you");

firstNode.SetN(secondNode);

logInfo(firstNode.GetN().GetV() + " ");