duangsuse::Echo
最后还是有点 bug,不过也有重构的部分 『我们保证以后不会往肉里打水了,我们欢迎你们来监督……』 — 《四十一炮》
其实,Lexer 是 LL-1(只用向前判断一个字符)的,但是 Parser 严格上来说它不能扩展自 Lexer
Parser 实际上也只是 Feeder<Character>,它的输入流支持 lookahead-1,可是那是字符层面的 lookahead,而 Parser 实际上只解析 token()
Lexer 的
这种情况,其实应该使用解析组合子框架(当然过会我会弄一个的,早想好了)
所以我打算弄一个 StreamFeeder 和一个给 Java 的 Sequence(Sequence.OfProducer, 如果用 Kotlin 会缩减无数无聊的代码,可是我不知道 Kotlin 的 Sequence 有没有太大的体积问题……)
这样,我们的 Parser: StreamFeeder<Token> 里
不过这样也就没法搞定
剩下的部分我会继续使用 Kotlin/Java 混合编程,面向库使用者的部分我会用 Java,核心的部分我使用 Kotlin(真希望 Kotlin 不会往上加个几十兆……)
Parser 实际上也只是 Feeder<Character>,它的输入流支持 lookahead-1,可是那是字符层面的 lookahead,而 Parser 实际上只解析 token()
Lexer 的
token() 导致了看起来也该是基于 Feeder<Token> 的 Parser 实际上却是基于随机 mark()/reset(),你不得不在每次匹配失败的时候重置输入,免得下一次 token() 返回不同的结果(我们的子解析器不能保证,在 token() 一次的情况下总是可以成功,所以一旦遇到未预期的 token(),不得不『消耗』掉它,即便调用自己的解析器不希望那么做)这种情况,其实应该使用解析组合子框架(当然过会我会弄一个的,早想好了)
所以我打算弄一个 StreamFeeder 和一个给 Java 的 Sequence(Sequence.OfProducer, 如果用 Kotlin 会缩减无数无聊的代码,可是我不知道 Kotlin 的 Sequence 有没有太大的体积问题……)
这样,我们的 Parser: StreamFeeder<Token> 里
constructor(String file, CharSequence code): super(file, Sequence(Lexer(file, code)::token))再次强调,Feeder 本该是给组合函数式解析器喂 item 的(它就不应该
open),我会弄个 Delegate 把它的所有方法移到 AbstractFeeded 里不过这样也就没法搞定
onItem, onEnd 的问题了……剩下的部分我会继续使用 Kotlin/Java 混合编程,面向库使用者的部分我会用 Java,核心的部分我使用 Kotlin(真希望 Kotlin 不会往上加个几十兆……)
没什么目标,也只好信手去做……
我想把 Dokuss 完成,可是 Parser 也要写…… 而且 Dokuss 剩下的一个 Nat16, Nat8 的 ZExt (zero-extension)有点不好弄
zext 是因为 Nat16 其实是 kotlin.Short 实现的,它把高位的比特当作 sign 解释,
我们要先 toInt(),然后移位 bitwise or 操作把这个比特加回来
可是它不好测试
我想把 Dokuss 完成,可是 Parser 也要写…… 而且 Dokuss 剩下的一个 Nat16, Nat8 的 ZExt (zero-extension)有点不好弄
zext 是因为 Nat16 其实是 kotlin.Short 实现的,它把高位的比特当作 sign 解释,
.toInt() 的时候就会错误解释一个比特的信息我们要先 toInt(),然后移位 bitwise or 操作把这个比特加回来
可是它不好测试
duangsuse::Echo
calc.zip
proguard -keep 'public class calc.inst.Main { public static void main(java.lang.String[]); }'
-injars calc.jar -out calc_out.jar
-libraryjars '/usr/lib/jvm/java-9/jmods/java.base.jmod(!**.jar;!module-info.class)'
-dontobfuscate -dontwarn
以后是 48K,我看看换成 Kotlin 的 collection 会不会加体积本来数学不好,还要写这个自己都不知道是为什么要那么写的东西
何况刚才我写的链表也缺了点东西,比如
但是单就这个数据结构的实现上来看,我觉得还有很多应该思考建模方式的东西
何况刚才我写的链表也缺了点东西,比如
insert 操作…… 它应该可以加在 iterator 上面但是单就这个数据结构的实现上来看,我觉得还有很多应该思考建模方式的东西
既然本频道之前的东西都没上 LICENSE,这次的代码也不上了,妮妮萌萌系爱抄抄吧,只要你们会就行了。
一些代码留着下次可以继续测试和复用,比如 Feeder
StreamFeeder 有点累了,没写出来(即便是写出来也不需要太大力气,而且可以继续写方便复用的解析器框架
它不依赖我写的 Linked.List,话说 Linked.List 把 ProGuard 的 partial evulation 都给弄炸了,还说找不到 calc.Linked.Cons 和 calc.Slice 的公共超类?莫名其妙,即便 Cons 是属于 sealed class 的 data class。
一些代码留着下次可以继续测试和复用,比如 Feeder
StreamFeeder 有点累了,没写出来(即便是写出来也不需要太大力气,而且可以继续写方便复用的解析器框架
它不依赖我写的 Linked.List,话说 Linked.List 把 ProGuard 的 partial evulation 都给弄炸了,还说找不到 calc.Linked.Cons 和 calc.Slice 的公共超类?莫名其妙,即便 Cons 是属于 sealed class 的 data class。
Forwarded from Deleted Account
黑客是为了挑战最有难度的技术,就像Unix那样,像Linux那样,他们主要是为了提供更好更牛的东西,他们不破解软件,他们用自己的能力重写一套更牛逼的软件。他们还像telegram一样,支持1.5GB的文件 ,支持20万人的群,无限人数的channel,以及足够开放的平台……这才是真正的hacker精神
#Kotlin 是好事,你看那 Deprecated 本来就应该换了(而且 Kotlin 的
至于 Null safety (Nullability) 更是 Kotlin 比 #Java 化腐朽为神奇的地方(当然,
它既然觉得
annotation class kotlin.Depreacted 还带了 IDE 自动替换(比如,val T.isUserAMonkey get() = … 能够换成 .isMonkeyUser 自动的;至于 Null safety (Nullability) 更是 Kotlin 比 #Java 化腐朽为神奇的地方(当然,
in/out 型变性声明而不是 ?super/?extends 类型上下限界也是一个优秀之处),这实在可以说是 Kotlin 最骄傲的地方之一。它既然觉得
str: String?, 你 str!! 一下就可以拿到 kotlin.String! 了(也可以用 ?. 安全 Null 传导),不过如果真的是 null 引用的话,就会抛出 KotlinNullPointerException val files: Array<File>? = … files.forEach { f -> f.close() } // Unsafe use of a nullable receiver of type Array<File!>?(fn as (String) -> *)(json["user_nickname"]) // Type mismatch: inferred type is String? but String was expected
duangsuse::Echo
#Kotlin 是好事,你看那 Deprecated 本来就应该换了(而且 Kotlin 的 annotation class kotlin.Depreacted 还带了 IDE 自动替换(比如,val T.isUserAMonkey get() = … 能够换成 .isMonkeyUser 自动的; 至于 Null safety (Nullability) 更是 Kotlin 比 #Java 化腐朽为神奇的地方(当然,in/out 型变性声明而不是 ?super/?extends 类型上下限界也是一个优秀之处),这实在可以说是…
你会爱上 Kotlin 的,尤其是:如果你写算法的话
Java 简直能把 C++ 写5行的代码写10行,而且还不如 Kotlin 可移植
我几乎不写 Java,更看不上 Groovy 那种辣鸡语言,JRuby 和 JPython 试过,不太喜欢。不过 Scala 我是不常用,Eta(Haskell for the JVM) 的 IDEA 支持不好
Groovy 怎么辣鸡呢?IDEA 2019 打开你的 Groovy (我只用 Gradle)脚本看看,你会发现一堆 type error
这 TMD 绝对不是 JetBrains 人懒的锅。
谁叫你弄个什么鬼
还有(好像是 Gradle
脚本语言随便起来是可以很随便的,比如那个
有些完全是『工程派』的人是不了解这些事情的,他们只是觉得写得越少/多越好,嗯…… 所以才有了类似 Ant XML、SOAP("Simple" Object Accessing Protocol) 这种东西。
他们写的时候就只会以一种思路、一种视角看一个示例程序甚至完全不看,就是想当然地设计,设计出类似 Java 的 type wildcard 的东西(当然这个还是比较保守的),因为不管你在某些方面再好,也总有自己还没学过的方面。
有些人只看着所谓的测试文档覆盖率,所谓的持续集成,所谓的工程标准。
可是他们注意力的重点,几时才会放到自己要实现的东西本身上来呢?
再看看某些所谓的中文编程语言,他们到底在做个什么呢?老祖宗的好东西全给糟蹋了,中文了你还用逗号切参数列表,中文了你还把“”拿来和""一起都记字符串,中文你还管 boolean 叫布耳,中文你还把 break; continue 翻译成『打断』『继续』,翻译个驴唇不对马嘴,不够用心。
Java 简直能把 C++ 写5行的代码写10行,而且还不如 Kotlin 可移植
我几乎不写 Java,更看不上 Groovy 那种辣鸡语言,JRuby 和 JPython 试过,不太喜欢。不过 Scala 我是不常用,Eta(Haskell for the JVM) 的 IDEA 支持不好
Groovy 怎么辣鸡呢?IDEA 2019 打开你的 Groovy (我只用 Gradle)脚本看看,你会发现一堆 type error
这 TMD 绝对不是 JetBrains 人懒的锅。
import static System.out
def doge = "🐕"
out.println("Emmm ${doge}.") // can't be applied to GString 谁叫你弄个什么鬼
GString 的???难道你要惰性求值???还有(好像是 Gradle
Action<in T> 专属的),谁告诉你 it 可以被隐式作为 this 的?['1','2','3'].map { println(replace('1','')) }
为什么 def 也可以用来不带参数元组的定义?你们的作用域是怎么做的?为什么给人感觉那么奇怪?脚本语言就可以如此随便?脚本语言随便起来是可以很随便的,比如那个
0+'1' != '1'+0、'0'==0 的 JavaScript。有些完全是『工程派』的人是不了解这些事情的,他们只是觉得写得越少/多越好,嗯…… 所以才有了类似 Ant XML、SOAP("Simple" Object Accessing Protocol) 这种东西。
他们写的时候就只会以一种思路、一种视角看一个示例程序甚至完全不看,就是想当然地设计,设计出类似 Java 的 type wildcard 的东西(当然这个还是比较保守的),因为不管你在某些方面再好,也总有自己还没学过的方面。
有些人只看着所谓的测试文档覆盖率,所谓的持续集成,所谓的工程标准。
可是他们注意力的重点,几时才会放到自己要实现的东西本身上来呢?
再看看某些所谓的中文编程语言,他们到底在做个什么呢?老祖宗的好东西全给糟蹋了,中文了你还用逗号切参数列表,中文了你还把“”拿来和""一起都记字符串,中文你还管 boolean 叫布耳,中文你还把 break; continue 翻译成『打断』『继续』,翻译个驴唇不对马嘴,不够用心。
对所有编程语言里语言是中文的,若它属辣鸡设计,
锤爆(它)