BVM虚拟机和编译器
词法分析和语法分析
词法分析器使用flex生成, 此法规则文件保存在parser/lex.l
.
语法生成器使用bison生成, 语法文件保存在parser/parser.y
.
语法示例
contract mycnt {
func myfunc0(b) {
var x = b
return x
}
func myfunc1(a, c) {
var r = myfunc0(333)
return a+c+r
}
var y = myfunc1(111, 222)
println(y)
var m = 111
var n = 222
if m > n {
var i = 555
println(i)
} elif m < n {
var j = 666
println(j)
} else {
var l = 777
println(l)
}
var t = (1+2)*3
println(t)
var a = 0
while (a<10) {
println(a)
a = a + 1
}
var a = "mystr"
println(a)
var a = 1
a += 3 * (5 - 1)
println(a)
}
功能列表
- 内部函数调用
- 外部函数调用
- if/else for switch while
- 数据类型: 整数 字符串 map list
- 逻辑和关系: && || ! >= <= > <
- 运算符: + - * / += -= *= /= % ^
安装方式:
- 建立golang开发环境
- 建立开发目录: 在当前目录执行
mkdir -p bvm/src/bvm
- 设置GOPATH: 进入
bvm
目录执行:export GOPATH=$(pwd)
- 克隆代码: 进入
src/bvm
, 执行:git clone https://gitlab.com/bottos-project/bvm.git .
- 编译代码: 进入代码的
cmd
目录下, 执行:go build main.go
- 运行测试代码: 在代码的cmd目录下运行:
./main test1.contract