duangsuse::Echo
😂 Sticker
(说句比较丧气的话,虽然现在 HotSpot 的优化很厉害,现在很多硬件也很好,不推荐使用 Java 编写任何和 DSP 相关的代码,推荐使用 C/Julia/Python/Octave 等
duangsuse::Echo
最后的重构目标,现在已经支持 1_000 0x1234af 0x1D 这种数字
给大家解释一下这些类的作用和用法
借用王某人的一句话,
lime.text
这个包是用于处理代码文本表示的,它把对 S-表达式链表的文本表示解析为
lime.type
这个包包含 Lime 内部数据表现形式,它很简单,Lime 内部只需要「符号」、「S 表达式列表」 和 「宏」 三种对象
借用王某人的一句话,
「我并不推崇 Lisp,我也不是 Lisp 狂人,它只是我的小玩意儿之一。这个非常精巧的小玩意儿]」
(注)我只是觉得这玩意虽然依赖 Kotlin stdlib,但是本身没几行代码,所以感到高兴(我有体积强迫症),其实我觉得它大概不如 Lice 吧lime.text
这个包是用于处理代码文本表示的,它把对 S-表达式链表的文本表示解析为
List 对象的形式Lexer
这个类包含 Lime 的分词器程序Token
这个类的实例代表 Lime 分词器江代码分成的一个个「词条(或标记)」Parser
这个类通过「递归下降法」解析和生成具有 S-表达式结构的 List 对象,这个类产生的列表对象可以被 Lime 展开器(解释器)解释执行lime.type
这个包包含 Lime 内部数据表现形式,它很简单,Lime 内部只需要「符号」、「S 表达式列表」 和 「宏」 三种对象
Macro
宏可以被理解为 JavaScript 的 Function,不过,Lime 里它只是一种「可以 apply(或者 invoke)」的对象,要不然得成大写 (. print (. + 1 1)) 这种代码Symbol
Symbol 是字符串的 Wrapper,不过是一个独立出来的「字符串」类型而已,这和 ES6 上的 Symbol 不一样SexpList
typealias SexpList = ArrayList<Any?>
包 lime 包含了 Lime 语言解释程序Lime
这是 Lime 的解释器,它按照固定规则在一定上下文中展开 Lime 宏,并执行一些原生调用-dontobfuscate
-target 1.8
-optimizations *
-optimizationpasses 5
-keepattributes SourceFile,LineNumberTable
-libraryjars /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.fc28.x86_64/jre/lib/rt.jar
-keep class lime.Lime { *; }
-keep class lime.Main { *; }
-keep class lime.type.Macro { *; }
-keep class lime.type.SexpList { *; }
-keep class lime.type.Symbol { *; }
-keep class lime.text.Token { *; }
-keep class lime.text.Lexer { *; }
-keep class lime.text.Parser { *; }