ngra string regex use ir as jit engine as well
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
|
||||
# 适用于NGRA字符串正则的IR形式
|
||||
|
||||
## 两个指针
|
||||
|
||||
1. 活动指针,记录当前的搜索位置,下文“不更新活动指针”的意思是算计结束后自行对活动指针进行复位
|
||||
2. 锚点指针,记录一个区间的开始位置
|
||||
|
||||
## 检查点
|
||||
|
||||
检查点是锚点指针的一种形式,以栈形态存储,创建检查点时,上一个检查点自动压栈,并用当前检查点替换为当前的锚点指针
|
||||
|
||||
## 符号区
|
||||
|
||||
使用DEFINE指令定义的符号定义在符号区中,符号的类型通过第一次赋值确定,源生成模式下,可以通过第一个赋值指令推导其类型
|
||||
|
||||
## 算子
|
||||
|
||||
1. 搜索算子(SEARCH %str; SEARCH %unicode;SERCH %set_expression),向后搜索确定长度序列或者满足规则的字符集,更新活动指针,不更新锚点指针,搜索结果保存在全局上下文中
|
||||
2. 跳转算子(JMP %cmd_idx),跳转到指定的IR指令之前,不变化任何指针,
|
||||
3. 回到(BACK %cmd_idx %count)跳转到一个跳自身位置之前的位置,并更新跳转次数,不变化任何的指针,%count应当是使用DEFINE指令定义好的符号
|
||||
4. 比较指令(CONDITION %cmd_true %cmd_fail),比较前一条SEARCH指令是否成功,并指定跳转到指定的位置,如果某种条件不需要跳转,请使用0进行填充
|
||||
5. 检查点指令(CHECK),将锚点指针强制拉取到活动指针的位置
|
||||
6. 弹出检查点(UNCHECK),将一个检查点撤销并销毁
|
||||
7. 划分区间指令(SPAN %name),将锚点指针和活动指针之间的部分划分为一个Span<>,并弹出对应的检查点
|
||||
8. 定义指令(DEFINE %symbol)定义一个符号
|
||||
9. 赋值指令(ASSIGN %symbol %value)将符号设定为值
|
||||
Reference in New Issue
Block a user