分类 技术 下的文章

之前就有过一次,写文章的时候添加 emoji,提交后数据库错误🤪,然后那篇文章就没有用那个活泼又传神的 emoji

后来谷歌了一下,其实 Mysql 是支持 emoji 的,不过一般中文用的字符集都是 utf8,标准的 uft8 只支持 3 个字节,而一个 emoji 有4个字节,把数据库的字符集改为支持 4 个字节的 utf8mb4 字符集就行了,当然 Typecho 的设置也要相应的改变一下 Mysql 连接参数。

- 阅读剩余部分 -

代码分为五个部分

  1. 读入文法并进行处理、扩展
  2. 求项目集规范族
  3. 构造 DFA
  4. 构造分析表
  5. 分析输入串

经过实验梳理了一遍 LR(0) 语法解析的过程,按照书上的顺序实现不是很复杂。
前面的实验都是用 C++ 写的,这次用 Java 写感觉各有千秋,各有方便和不方便的地方,比如 Java 无法 new 泛型定长数组HashMap<Character, String>[],C++ 的话直接声明Map<char, string>[]就能用了。
Google 了一下貌似说就是 Java 不支持。详细解释:

作者:ylxfc 链接:https://www.zhihu.com/question/20928981/answer/39234969
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

核心的问题在于Java范型和C#范型存在根本区别:Java的范型停留在编译这一层,到了运行时,这些范型的信息其实是被抹掉的;而C#的范型做到了MSIL这一层。Java的做法不必修改JVM,减少了潜在的大幅改动和随之而来的风险,也许同时也反映出Java Bytecode规范在设计之初的先天不足;C#则大刀阔斧,连CLR一起改以支持更彻底的范型,换句话说,在范型这一点上,感觉C#更C++一点。在Java中,Object[]数组可以是任何数组的父类,或者说,任何一个数组都可以向上转型成它在定义时指定元素类型的父类的数组,这个时候如果我们往里面放不同于原始数据类型,但是满足后来使用的父类类型的话,编译不会有问题,但是在运行时会检查加入数组的对象的类型,于是会抛ArrayStoreException

String[] strArray = new String[20];
Object[] objArray =strArray;
objArray[0] = new Integer(1); // throws ArrayStoreException at runtime

因为Java的范型会在编译后将类型信息抹掉,这样如果Java允许我们使用类似
Map<Integer, String>[] mapArray = new Map<Integer, String>[20];
这样的语句的话,我们在随后的代码中可以把它转型为Object[]然后往里面放Map<Double, String>实例。这样做不但编译器不能发现类型错误,就连运行时的数组存储检查对它也无能为力,它能看到的是我们往里面放Map的对象,我们定义的<Integer, String>在这个时候已经被抹掉了,于是而对它而言,只要是Map,都是合法的。想想看,我们本来定义的是装Map<Integer, String>的数组,结果我们却可以往里面放任何Map,接下来如果有代码试图按原有的定义去取值,后果是什么不言自明。

主要解析器文件代码放在下面,完整代码在 https://github.com/heart4lor/LR0






- 阅读剩余部分 -

记得以前在服务器上安装 MySQL 安装过程中是会引导你设置 root 密码的,不知道从哪个版本起,可能是为了安全考虑,MySQL 的安装过程极为安静,会创建默认用户和随机密码,而不在安装时引导设定。另一个坑就是 plugins 字段的变化导致无法使用命令行密码登陆 root 用户,踩过多次坑之后记录一下,一并解决。

- 阅读剩余部分 -

之前托管在 Coding Pages 上的 Hexo 博客已经太久没有打理,趁着现在整理服务器的功夫搭建了一个 Typecho 博客。

以前喜欢各种偏激技术流,喜欢复杂的东西。从一开始的 WordPress 到大学折腾的 Hexo,一个太重,一个太轻。使用 Hexo 是一个很繁琐却又很有成就感的事情,从图床到 ejs 到 ci 自动 build,等等等等。但是折腾这些的同时,往往却忘记了搭建博客的初衷——记录技术和生活啊,博客本身的技术栈并不重要,重要的是内容!内容!内容!!

旧博客自从 18 年初开始忙着创办校开源社区以来就没更新过文章了,开源社区因为网络中心不支持的原因也凉了(摊手.jpg)整套静态博客本身也出了一些问题,包括但不仅限于:

  1. Hexo 的 NexT 主题真真已经烂大街了!!而且体积巨大!
  2. 右侧获取 QQ 头像接口挂了,这个事情应该是因为腾讯关闭了 WebQQ 导致相关接口不可用
  3. 部署在 Coding Pages 上还是不太稳,截至现在,就算目前,我在工作室校园网环境下访问速度慢到令人发指甚至直接打不开!
  4. 。。。编不出来了 反正就换了换了

嗯,,,所以就迁移到 Typecho 上来啦!够小巧够方便,刚好满足需求,就很舒服!

新博客名 YAEB 取自编译原理课上了解到的 YACC。

之前的旧博客上的内容,修改了一些文字后已经同步到了新的博客系统中。

我差不多花了一个晚上来手动迁移博客的内容,其实是可以写一个自动化的导入数据库的脚本的,但是一来为了保证新博客系统的整洁,万一搞乱了就很心烦;二来之前的文章我都会保留,但是有的会做一些排版、纠正、改进以及时间线上的调整(一切都是命运石之门的选择);三来每篇文章自己都看一看,看一看自己以前多傻*,哈哈哈。有趣的是,随着搬运工作的深入,我竟感觉更换博客这个过程像极了分手(???),之前的每一篇文章,都是按照 Hexo 的格式撰写的,虽说都是 Markdown 语法,但是细微处的不同,有些很周到,有些很没有理由……总之这种感觉很难形容……

反正都在下面了,公开处刑我自己

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓