自制脚本语言(1) 词法、语法、虚拟机的设计思路

摘要:介绍了一种自制的脚本语言的设计思路,定义第一版语言的词法与语法,虚拟机的设计。

编译器设计,是每个程序员通往高阶的必修课。从本文开始设计一种脚本语言及其编译器。为了方便,不编译为机器语言而是运行在一个基于栈的虚拟机上。语言是弱类型动态检查。虚拟机主要功能参考JVM。技术上,编译器选择Java语言写,虚拟机用C++写。因为Java便于开发,而C++可以管理底层。

第一版脚本语言,只需要实现一些简单的功能。变量定义与赋值,四则运算与比较表达式,函数的定义与调用,递归调用,控制台输入输出。


词法设计:

var表示变量: [a-z A-Z]+ [0-9 a-z A-Z]* 

number表示数字常量,为方便都转为double型: [0-9]* 或 [0-9]* . [0-9]*

String类型常量:" [.]* "

bool型常量true, false用1,0代替。

opt运算符: { } ( ) + - * / = < > == =!

保留关键词:if else while var function return print input


语法设计:

用LALR(1)语法解析。语法解析器(parser)用生成器(generator)自动生成。主要有以下生成式:

stmt_list -> stmt_list stmt

stmt -> if_stmt | while_stmt | function_stmt | exp | IO_stmt

exp -> bool_exp | four_exp | call_exp | (exp)


虚拟机设计:

方法区:保存函数、对象的元信息

运行栈:局部变量、上下文

堆:变量的体、函数的体

GC:停顿标记清扫

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值