duangsuse::Echo
习惯性的在写 parser 🤔 可是觉得不如 Android 开发有时候用到的 Pattern 们和自己布局的 View 们,怕被喷。
这里为了兼容用的是 Ruby 的 ARGF 特殊文件... emmm
这个对象有时候是没有
我没法用 ungetc 实现 peek(从输入流拿到一个 char,然后放回去,用来实现简单的结构判定)
不得不说,不能 lookahead 非常淡疼(虽然我可以模拟 buffer 来实现 peek_char)
那么写不写这个 buffer 呢?算了...
这个对象有时候是没有
ungetc 方法的 🤪我没法用 ungetc 实现 peek(从输入流拿到一个 char,然后放回去,用来实现简单的结构判定)
不得不说,不能 lookahead 非常淡疼(虽然我可以模拟 buffer 来实现 peek_char)
那么写不写这个 buffer 呢?算了...
This media is not supported in your browser
VIEW IN TELEGRAM
这个 parser 不够好,但也足够用。只要能解析这个文件就可以了。
duangsuse::Echo
连这都不会的 duangsuse 总算写出来了... 🤔 不过是一个简单的 scannerless parser 而已就花了好多时间,这还能不能和任何一个懂一分钱设计模式的 Android 前端比呢... 希望哪天能回到 Android.
This media is not supported in your browser
VIEW IN TELEGRAM
HackingCoolApk.zip
31.7 KB
目前的工作目录 #CoolApk
Forwarded from Solidot
Delphi 二十四岁,释出 10.3.1
Borland 在 1995 年 2 月 14 日释出了 Delphi 1,二十四年后,收购 Borland 的 Embarcadero 公司为了庆祝这一纪念日释出了 Delphi 10.3 Rio Release 1(10.3.1)。对比 Delphi 1 和运行它的 Windows 3 操作系统与 Delphi 10.3.1 和 Windows 10,你可以看到软件在二十四里的巨大变化。Media
https://www.solidot.org/story?sid=59580
Borland 在 1995 年 2 月 14 日释出了 Delphi 1,二十四年后,收购 Borland 的 Embarcadero 公司为了庆祝这一纪念日释出了 Delphi 10.3 Rio Release 1(10.3.1)。对比 Delphi 1 和运行它的 Windows 3 操作系统与 Delphi 10.3.1 和 Windows 10,你可以看到软件在二十四里的巨大变化。Media
https://www.solidot.org/story?sid=59580
duangsuse::Echo
居然还要处理多 Annotation 的情况... 气死我了
我不要处理算了,这就作为另外一个类似 Jawa 的 DSL 算了 hhhh(迫真(跑
simple_parser.rb
5.4 KB
#Ruby 一个普通的 Scannerless Parser
duangsuse::Echo
simple_parser.rb
🤔 接下来 duangsuse 给大家做一瞬生成的现场的表演(良心) #sysadmin #Ruby #Parser #recommended
首先,按照上面的消息把 Retrofit 接口定义的 Java 代码整成这个 Parser 可以理解的格式
然后,执行命令
好魔法的设计模式,虽然感觉好像除了能完全记下来以外也没什么特别的牛逼... 但是不明觉历... 🤔
... 能用就好
首先,按照上面的消息把 Retrofit 接口定义的 Java 代码整成这个 Parser 可以理解的格式
然后,执行命令
ruby simple_parser.rb retrofit.java 1>result.json,导出成果到 JSON 文件ary = File.read('result.json').yield_self(&JSON.method(:parse))
接下来就是魔法的时候了(迫真)class Interface然后
attr_accessor :name, :method, :path, :args, :type
def initialize(json)
@method = json['method']
@path = json['path_template']
@name = json['fun']['name']
@args = json['fun']['args']
@type = json['fun']['type']
end
def codegen_method; return method == 'GET' ? '' : "#{method}@" end
def codegen_type_name; case type['name'] when 'List' then 'array' end; end
def codegen_type
if type.is_a?(String) then "-> #{type}" else "-> #{codegen_type_name}:#{type['inner']}" end
end
def codegen_args
args.map do |a|
web_param = a['name']
param = a['param']
type = a['type']
case a['ann']
when 'Query' then "#{param}:#{type}"
when 'Body' then "#{param}:#{type}-body"
end
end.join(', ')
end
def codegen
"#{codegen_method}#{name}(#{codegen_args})#{codegen_type}\n = #{path}"
end
end
puts ary.map(&Interface.method(:new)).map(&:codegen)吐嘈:还没有现在某些前端的设计模式魔法呢.... 如果前端再在自己的设计模式上加点东西,是不是就被完爆了呢?
好魔法的设计模式,虽然感觉好像除了能完全记下来以外也没什么特别的牛逼... 但是不明觉历... 🤔
... 能用就好
duangsuse::Echo
🤔 接下来 duangsuse 给大家做一瞬生成的现场的表演(良心) #sysadmin #Ruby #Parser #recommended 首先,按照上面的消息把 Retrofit 接口定义的 Java 代码整成这个 Parser 可以理解的格式 然后,执行命令 ruby simple_parser.rb retrofit.java 1>result.json,导出成果到 JSON 文件 ary = File.read('result.json').yield_self(&JSON.method(:parse))…
以上脚本只能部分自动化(而且 Spectrum 目前也没有兼容 MutliBody 的 API,因为 GeekApk 没有用到),要使用的话还是得自己修补一下才行...
不过也可以减小工作量了。
不过也可以减小工作量了。