小编mal*_*ten的帖子

正则表达式的虚拟机

我阅读正则表达式匹配:虚拟机方法,现在我尝试解析正则表达式并从中创建虚拟机.标记器工作并创建其标记.在那一步之后,我从令牌流创建反向波兰表示法,所以最后我得到

a b c | |
Run Code Online (Sandbox Code Playgroud)

从正则表达式a|(b|c).那么,现在我卡住了一步:我想要一个阵列

0: split 1, 3
1: match 'a'
2: jump 7
3: split 4, 6
4: match 'b'
5: jump 7
6: match 'c'
7: noop
Run Code Online (Sandbox Code Playgroud)

从上面的流.我没有把它弄好......我使用输出数组和堆栈作为每个令牌的起始位置.首先,将3个值添加到输出(并且它是堆栈的起始位置).

output              stack
------------------- ------
0: match 'a'        0: 0
1: match 'b'        1: 1
2: match 'c'        2: 2
Run Code Online (Sandbox Code Playgroud)

随着|,我从堆栈弹出最后2个位置并插入splitjump在特定位置.根据当前堆栈长度和我添加的元素数量计算这些值.最后,我将最后一个元素的新起始位置添加到堆栈中(在这种情况下保持相同).

output              stack
------------------- ------
0: match 'a'        0: 0
1: split 2, 4       1: 1
2: match …
Run Code Online (Sandbox Code Playgroud)

regex vm-implementation

12
推荐指数
1
解决办法
645
查看次数

标签 统计

regex ×1

vm-implementation ×1