摘要: 子表达式的语法为name:regex在处理时,会把name加入进符号表中,方法是hash,最简单的加法而在regex中如果碰到[name]这种模式,则尝试去找符号表,如果找不到则报错。代码如下,欢迎大家测试。#include #include #include //这个版本允许定义正则子表达式,定义的时候以名字开头,然后是冒号,然后是正则表达式主体。//在引用子表达式的时候,需要用中括号把子表达式括起来,因此中括号也跟其他操作符一样,作为保留字符//目前还没有处理转义字符,再过几个版本吧。int token[100];int token_pointer;char reg_operator[10 阅读全文
posted @ 2013-06-22 20:16 huangnima 阅读(499) 评论(0) 推荐(0)
摘要: 由于当前的连接符变为非显示,所以在有些时候需要考虑当前输入指针所指的位置是否缺少连接符,如果缺少,则将连接符入栈。 1 #include 2 #include 3 #include 4 //这里默认是没有显示的连接运算符,运算符的优先级为括号、闭包*、连接.、并| 5 //在括号后及闭包后可能缺少显示的连接符,因此需要考虑添加连接符,而由于并操作符的优先级比连接符低 6 //所以就不需要在处理并操作符的时候去考虑是否缺少显示的连接符了 7 int token[100]; 8 int token_pointer; 9 char reg_operator[100]; 10 ... 阅读全文
posted @ 2013-06-22 12:52 huangnima 阅读(383) 评论(0) 推荐(0)
摘要: 这里只是当作自己的代码版本管理器使用,并不去详细介绍代码,毕竟我的注释里面已经说明了很多。欢迎大家测试,如果发现出错了,望在下面回复,多谢。注意,当前的假定是输入自己不能有错误,而且*、(、)、.、|这几个操作符是保留字,其他的字符则当作其自身意思。当前不考虑转义字符及三元组,以及不考虑子表达式命名,因此只能处理一个长正则表达式。 1 #include 2 #include 3 #include 4 //这里只处理最简单的正则表达式,即包括括号,星号运算,连接运算和分支运算,这里分支运算在压栈是是一个点号 5 //其中括号优先级最大,其次是星号运算其次是连接运算最后是分支运算 ... 阅读全文
posted @ 2013-06-22 12:49 huangnima 阅读(337) 评论(0) 推荐(0)