Skip to content

WAY29/LoxGo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LoxGo

根据crafting interpreters中的教程一步步学习编译原理的知识,从零开始编写Lox语言,使用Golang语言编写。

进度

标注有*号为额外完成进度

  • 词法分析

  • 语法分析

  • (*) 类型系统

    • 内置类型及转换函数 (int, float, bool, string, array)
    • 获取类型对应字符串函数 (type)
    • 获取数组长度函数 (len)
  • 解释器

    • 表达式求值
    • (*) 自增自减运算符 a++; a--;++a;--a;
    • (*) 三目运算符 var b = a < 5 ? 0 : 1;
    • 输出语句 print a;
    • (*) (多)变量定义语句 var a = 2, b = 3;
    • 变量赋值语句 a = 5;
    • 控制流相关
      • if if (condition) {statments...} else {statments...}
      • while while(condition) {statments...}
      • for for (init;cond;inc) {statments...}
      • (*) break break;
      • (*) continue continue;
    • 函数相关
      • 函数定义 fun demo(a, b) {statments...}
      • 函数调用 demo(1, 2);
      • (*) return语句 return a+b; (并非使用异常来处理返回值)
      • 闭包
      • (*) 匿名函数 demo(func(a) {statments...}, 0)
    • 静态解析
      • 变量作用域
      • 在块中重定义变量错误
      • 在非函数中使用return语句错误
    • 类相关
      • 类的定义与实例化
      • 类的实例属性
      • 类方法与this
      • 类的构造函数与返回
      • 静态方法
      • 类的继承
  • 使用

go run main.go # 进入交互模式
go run main.go ./tests/if.lox # 运行文件

参考

About

Lox language toy interpreter by golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages