Sucha's Blog ~ Archive for April, 2022

22年4月5日 周六 01:28

改进侧边栏搜索

UI 交互没变化,也是方便之后如果想从站点、博客搜索内容的话,会方便一些,不过自己测试了一下,很多内容搜索不到,应该是小站点,搜索引擎照顾不了。

没名气的静态网页就这样的了,😌

22年4月5日 周六 01:28

MoocHelper 更新到 0.2.12

项目地址 MoocHelper,同时更新了 .vsix 跨平台安装包。

因为 LuaHelper 前段时间更新了,我也跟着将基本的代码更新上去,这次改动主要是 anotation,语法方面我觉得没有什么变化。 anotation 我用得少,所以相关改变也说不上了解。

另外修复了 switch case 中 case 后面 exp 的一些解析问题,之前跟 Lua EBNF 表述的 prefixexp 语法 ':' 有冲突。

mooncake 里 case 紧接着的 exp 可以是右值,比如 object:func1(param1):func2(param2) 是一个合法的 Lua prefixexp, 而 case 语句依赖 ':' 作为终结符,由于 Lua 不依赖空格、分行、间距来作为语法分割,因此刚刚的 exp 对于两个不同的 ':' 可以有多种解释:

-- case 1
case object:
    func1(param):func2(param2)
-- case 2
case object:func1(param1):
    func2(param2)
-- case 3
case (object:func1(param1):func2(param2))

实际上 Lua 的 prefixexp 使用的是贪心策略,最终解析出来的是 case 3,认为 case 子句没有完结,会报语法错误。 而 mooncake 之前对这里没有定义,因此 case 1 和 case 2 都是可选的合法解释。

这次的修改加上了补充,认为 ':' 之后如果紧接着空格,比如 '\t'、'\n'、'\t'、'\v',则认为是 case 语句的终结。 因此 case 1、case 2 才是 mooncake 合法的 case 语句,并且语义有区别。而 case 3 并不是合法的语句。

大概这样吧。