Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New feature: Misc Feature request #15

Open
duangsuse opened this issue Jul 5, 2018 · 7 comments
Open

New feature: Misc Feature request #15

duangsuse opened this issue Jul 5, 2018 · 7 comments
Assignees
Labels
enhancement New feature or request semantic Lite semantic syntax Lite syntax

Comments

@duangsuse
Copy link
Collaborator

  • Overriding for + and - operators
  • indent level based block syntax
  • delete scope statement
  • real block and nesting lexical scoping
@duangsuse duangsuse added enhancement New feature or request syntax Lite syntax semantic Lite semantic labels Jul 5, 2018
@duangsuse duangsuse self-assigned this Jul 5, 2018
@duangsuse
Copy link
Collaborator Author

  • Range support

@duangsuse
Copy link
Collaborator Author

  • Symbol support

@duangsuse
Copy link
Collaborator Author

  • break/continue/return in blocks

@duangsuse
Copy link
Collaborator Author

duangsuse commented Jul 5, 2018

LiteVM 轻量级 JVM Lite 语言兼容虚拟机

基本法 | Basic Rules

我们来整理一下,顺便彻底解释所有指令语义和 stack-based 化指令(只使用堆栈传参)

  • LV 拥有 call-stack(带有 ret_addr 和 lazy 的 locals HashMapcatch ArrayMap )、stack(LinkedList) 和 global table(Hashtable)、function tablelabel tablefilelinepcexpect_funexpect_label

  • LV 是 基于堆栈 的虚拟机,LV 只有全局表要求线程安全

  • LV 支持自己的 exception 系统

  • LV 支持 block,会在创建 block 时自动打包 block 的所有符号本地变量引用

  • LV 使用可扩展的 指令系统,支持指令插件

  • LV 支持的字面量有 boolean/null/number ( byte, short, int, long, float, double, BigInteger, BigDecimal )/char/string/symbol/range

  • LV 支持 注释动态链接(允许在需要的时候创建新数组来容纳更多指令并注册函数符号表)、调试信息 (file name, line number)

  • LV 暂时使用 代码文本表示

  • LV 支持 循环和分支逻辑、子过程调用、赋值运算

  • 词法 | Lexical Rules

    ; 到行末尾是注释,除非是在字符串出现这个
    true 是真 false 是假
    null 是空
    支持 0x 0b 0o 数字(Hex 数位字符只支持小写),自动删除下划线,类型依次以 B S I L F D N P 结尾,默认类型为 I
    'c' 单字符的 single-quoted stringchar
    "str" 'str' 非单字符的为 string,其中 "" 会处理 escape \b\t\n\r\"\\
    sssssymbol
    0..9range,不过这不是在词法扫描的时候创建的...
    \t\f\r\13\v\u000C 是空格
    \n 是换行符

    语法 | Syntax

    单纯的汇编指令式,一行为一条指令,可能是 symbolObject,如果是 Object,向堆栈上压入这个对象,如果是 symbol 则尝试执行 OpCode

    指令列表

    • nop

    啥都不做

    压入参数

    • (任何非 symbol 类型的词条)

    向堆栈上压入一个对象

    • pushnull

    向堆栈上压入 null

    • pushtrue

    向堆栈上压入 true

    • pushfalse

    向堆栈上压入 false

    • pushlv

    向堆栈上压入当前 LV 虚拟机引用

    • newary

    弹出栈顶的值,转换为 Integer,创建指定大小的新的 Array 对象并压入堆栈

    • newrange

    弹出栈顶的两个值,转换为 Integer,创建 range v2..v1 对象并压入堆栈

    • newrangestep

    弹出栈顶的三个值,转换为 Integer,创建 range v3..v2 (step v1) 对象并压入堆栈

    • newsymbol

    弹出栈顶的值,检查其是否是 String 的实例,如果不是,抛出内部错误,否则创建新 Symbol 对象并压入堆栈

    • newblock

    弹出栈顶的值,检查其是否是 Range 的实例,如果不是,抛出内部错误,否则创建新 Block 对象并压入堆栈

    流程控制

    • jump
    • branchif
    • branchunless
    • throw
    • catch
    • label
    • goto

    FFI

    • new

    • send

    作用域

    • scope

    初始化当前调用栈帧的本地表

    • leave

    将当前调用栈帧的本地表引用置为 null

    • sget

    弹出一个 String 参数 v0,将本地变量或 null 入栈

    • sput

    弹出一个 String 参数 v0,弹出一个参数 v1,设置本地变量 v0 = v1

    • get

    • put

    子过程

    • fun

    弹出一个 String 参数 v0,在下一个 IP 处添加函数符号 v0

    • call

    弹出一个 String 参数 funame,然后调用指定函数,如果没有找到,则设置 expect_fun

    • ret

    弹出调用栈帧并重置 pcret_addr

    • yield

    弹出一个 Block,调用它

    特殊操作

    • index
    • newindex
    • file
    • line
    • len
    • tostring
    • hashcode
    • print
    • dprint

    数学运算

    • or
    • in?
    • and
    • op<
    • op>
    • op<=
    • op>=
    • eq
    • noteq
    • fulleq
    • shl
    • add
    • sub
    • mul
    • div
    • mod
    • pwr
    • cast
    • not
    • inc
    • dec

    堆栈机标配指令

    • swap
    • pop
    • dup

@duangsuse
Copy link
Collaborator Author

  • [] 能索引 数组、Map、List、Object(getXXXX property or field)、subclass、static member
  • []= 能新建索引 数组、Map、List、Object(setXXXX property or field)、static member

@duangsuse
Copy link
Collaborator Author

duangsues.is_a? SaltedFish, [05.07.18 22:39]
指令列表:

  • nop 啥都不做

  • push [object] 往栈上放置一个对象

  • pushnull 放置 null

  • pushtrue 放置 true

  • pushfalse 放置 false

  • pushlv 往栈上放置虚拟机引用

  • scope 进入作用域

  • leave 离开作用域

  • sget 读取本地变量

  • sput 设置本地变量

  • fun [sym] 定义函数符号

  • call [sym] 调用函数

  • ret 返回

  • jump [ip] 跳转到 ip 处执行

  • branchif [ip] if

  • branchunless [ip] unless

  • get 读取全局变量

  • put 设置全局变量

  • newary [n] 创建 n 维度的数组

  • index []

  • newindex []=

  • file [fname] 在文件中

  • line [line] 在行中

  • send 调用对象方法和类方法

  • new 创建对象

  • block [range] 创建块对象,它打包所有引用到的本地变量的绑定

  • yield 调用块对象

  • or

  • in?

  • and

  • op<

  • op>

  • op<=

  • op>=

  • noteq

  • eq

  • fulleq

  • shl

  • newrange

  • add

  • sub

  • mul

  • div

  • mod

  • pwr

  • cast

  • not

  • inc

  • dec

  • len

duangsues.is_a? SaltedFish, [05.07.18 22:41]
[In reply to duangsues.is_a? SaltedFish]

  • throw

  • catch

  • top

  • topn

  • swap

  • pop

  • dup

  • dupn

  • tostring

1 similar comment
@duangsuse
Copy link
Collaborator Author

duangsues.is_a? SaltedFish, [05.07.18 22:39]
指令列表:

  • nop 啥都不做

  • push [object] 往栈上放置一个对象

  • pushnull 放置 null

  • pushtrue 放置 true

  • pushfalse 放置 false

  • pushlv 往栈上放置虚拟机引用

  • scope 进入作用域

  • leave 离开作用域

  • sget 读取本地变量

  • sput 设置本地变量

  • fun [sym] 定义函数符号

  • call [sym] 调用函数

  • ret 返回

  • jump [ip] 跳转到 ip 处执行

  • branchif [ip] if

  • branchunless [ip] unless

  • get 读取全局变量

  • put 设置全局变量

  • newary [n] 创建 n 维度的数组

  • index []

  • newindex []=

  • file [fname] 在文件中

  • line [line] 在行中

  • send 调用对象方法和类方法

  • new 创建对象

  • block [range] 创建块对象,它打包所有引用到的本地变量的绑定

  • yield 调用块对象

  • or

  • in?

  • and

  • op<

  • op>

  • op<=

  • op>=

  • noteq

  • eq

  • fulleq

  • shl

  • newrange

  • add

  • sub

  • mul

  • div

  • mod

  • pwr

  • cast

  • not

  • inc

  • dec

  • len

duangsues.is_a? SaltedFish, [05.07.18 22:41]
[In reply to duangsues.is_a? SaltedFish]

  • throw

  • catch

  • top

  • topn

  • swap

  • pop

  • dup

  • dupn

  • tostring

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request semantic Lite semantic syntax Lite syntax
Projects
None yet
Development

No branches or pull requests

1 participant