最近我一直试图在Haskell中创建一个正则表达式解释器.我所做的就是创建一个所有可能构造一个新的数据类型(顺序*,^,间隔等),然后定义一个匹配功能.它可以创造奇迹,但我的问题是我必须将输入(例如String "a(b*)(c|d)ef")转换为我的数据类型("Seq (Sym a) (Seq (Rep Sym b) (Seq (Or Sym c Sym d) Sym ef))").我遇到了这部分问题(我尝试创建一个新的数据类型,一个解析树,但我完全失败了).关于如何解决它的任何想法?
假设我有一个字符串,如:
abc(def(gh)il(mn(01))afg)lmno(sdfg*)
Run Code Online (Sandbox Code Playgroud)
如何确定第一个的匹配括号?(意思(def(gh)il(mn(01))afg))
我试图通过计算开放括号的数量直到第一个')'来创建一个between函数,但它不适用于像这样的字符串.
我试图缓存servlet响应但不知何故它不起作用(每次刷新页面时Firebug给我200 OK).这是我在servlet中添加的代码:
response.setContentType("application/javascript");
long now = System.currentTimeMillis();
response.setCharacterEncoding("UTF-8");
response.setDateHeader("Last-Modified", 0);
response.addHeader("Cache-Control", "max-age=5184000");
response.setDateHeader("Expires", now + 5184000 * 1000);
response.addHeader("Vary", "Host");
Run Code Online (Sandbox Code Playgroud)
我现在也尝试过setHeader和使用过Last-Modified.
似乎没什么用.有任何想法吗?
谢谢
这就是firebug向我显示响应/请求标头的方式(当资源应该从缓存中提取但不是)时:
Response Headersview source
Cache-Control max-age=5184000
Connection Keep-Alive
Content-Type application/javascript;charset=UTF-8
Date Thu, 21 Mar 2013 09:53:48 GMT
Expires Sun, 31 Mar 2013 16:51:01 GMT
Keep-Alive timeout=15, max=99
Request Headersview source
Accept */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control max-age=0
Run Code Online (Sandbox Code Playgroud)