| 类 | 说明 |
|---|---|
| CharTable |
CharTable 空间换时间优化字符判断性能
负值参数强转 char 会自动变正值,无需判断负值数组下标
isLetter(EOF) 不会下标越界
|
| Compressor |
Compressor
压缩规则:
1:为追求性能极致只压缩模板中的静态文本内容,指令输出的内容不压缩,例如 #(blog.content) 输出的内容不会被压缩
由于模板静态内容会被缓存,所以只需压缩一次,性能被最大化
2:多个连续空格字符压缩为一个空格字符
3:空格字符与 '\n' 的组合,压缩为一个 separator 字符。
|
| Ctrl |
Ctrl
封装 AST 执行过程中的控制状态,避免使用 Scope.data 保存控制状态
从而污染用户空间数据,目前仅用于 nullSafe、break、continue、return 控制
未来可根据需求引入更多控制状态
|
| LineCompressor |
LineCompressor 按行压缩
每次压缩一行,对 Text 节点进行压缩
1:为追求性能极致,只压缩 Text 节点,所以压缩结果会存在一部分空白字符
2:每次读取一行,按行进行压缩
3:第一行左侧空白不压缩
4:最后一行右侧空白不压缩(注意:最后一行以字符 '\n' 结尾时不算最后一行)
5:第一行、最后一行以外的其它行左右侧都压缩
6:文本之内的空白不压缩,例如字符串 "abc def" 中的 "abc" 与 "def" 之间的空格不压缩
7:压缩分隔符默认配置为 '\n',还可配置为 ' '。
|
| Location |
Location
生成异常发生的位置消息
|
| OutputDirectiveFactory |
OutputDirectiveFactory
用于定制自定义输出指令,替换系统默认输出指令,满足个性化需求
用法:
1:定义 MyOutput
public class MyOutput extends Output {
public MyOutput(ExprList exprList) {
super(exprList);
}
public void exec(Env env, Scope scope, Writer writer) {
Object value = exprList.eval(scope);
if (value !
|
| ParaToken |
ParaToken
|
| Parser |
DLRD (Double Layer Recursive Descent) Parser
|
| Scope |
Scope
1:顶层 scope.parent 为 null
2:scope.set(...)
|
| 异常错误 | 说明 |
|---|---|
| ParseException |
ParseException
词法、语法错误
|
Copyright © 2024. All rights reserved.