Skip to content

这是一个使用go语言开发的类C语言 解释器

Notifications You must be signed in to change notification settings

Bugbyebyebye/Cmicro-Compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cmicro-Compiler 类C语言解释器

简介

Cmicro-Compiler 是一个类C语言解释器,支持C语言的简单语法解析,主要是跟随《用Go语言自制解释器》以及《用Go语言自制编译器》这两本书进行编译原理的学习 。目前本程序代码部分借鉴自书中,创新补充实现了赋值语句input函数for循环(包括嵌套for循环)的解析,以及拓展了几个二元运算符>=<=等,后续还会继续完善。

文件结构

  • token:定义了token词法单元,用于将输入的代码根据可解析的token类型。
  • lexer:词法分析器。根据对应token将输入代码进行切分。结果输送进入ast。
  • object:定义了抽象语法树的节点类型。规定了语法分析器能够支持的数据类型。
  • ast:抽象语法树。此文件夹定义了抽象语法树的数据结构。用于将对应的token接生成相应的语法节点。自顶向下递归生成抽象语法树。结果输送进入parser
  • parser:语法分析器。递归的对抽象语法树进行递归下降解析,将结果输送进入evaluator
  • evaluator:求值器。递归对每一个ast语法节点node中的内容进行求值,将结果返回到repl交互中。
  • repl:交互式环境。用于接受用户输入和打印程序执行结果。

使用说明

支持的语法

  1. 变量声明 let a = 1;let a = true;let a = "hello"; 支持类型:int、string、bool,不是Null的值均认为为true。
  2. if 语句 if(a == 1){}else{} 支持条件判断:==、!=、>、<、>=、<=。
  3. for 语句 for(let i = 0;i < 10;i++){print("hello");}支持for循环,嵌套for循环。
  4. 支持函数定义和调用 let add = func(a,b){return a+b;};add(1,2);支持基本的函数定义和调用,支持函数闭包。
  5. 支持对变量的赋值语句 let sum = 0; sum = 1 + 2;对已定义变量可进行二次赋值。
  6. 支持部分内置函数。
    1. input():输入一个字符串,返回字符串。
    2. print():输出一个字符串,返回字符串。
    3. println():输出一个字符串并换行,返回字符串。
    4. len();:支持对字符串进行长度判断,返回长度。

运行

  • 安装go语言环境:Go安装及环境配置教程。本程序编写版本为go 1.20,低于本版本可能会出现异常错误。
  • 启动main.go文件即可。
  • 简单的表达式语句可以不输入“;”,但是复杂的代码如果不正确输入“;”可能会出现解析错误。特别是函数调用完成一定要加。

About

这是一个使用go语言开发的类C语言 解释器

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages