小编laz*_*tor的帖子

何时使用解析器生成器是否可行?

我正在为我正在编写的Web应用程序编写一个简单的文本模板语言(想想google的ctemplate).完成后,它将只包含少量可能的操作,简单的事情,如"评估和执行","评估和打印","评估和逃避HTML","评论".我正在考虑从头开始编写整个解析器,但我开始查看解析器生成器,如lex,flex和antlr.对于我的简单语法,这些似乎比我需要的更多.所以问题是,在什么时候使用解析器生成器是切实可行的?

c parsing antlr lex flex-lexer

5
推荐指数
1
解决办法
451
查看次数

通过非阻塞套接字轮询正确处理EWOULDBLOCK

我一直在研究一个轮询TCP守护进程.最近,我已经读过非阻塞套接字有时会在send()或recv()期间抛出EWOULDBLOCK错误.我的理解是,如果recv()抛出一个EWOULDBLOCK,这(通常)意味着没有东西可以接收.但是我不清楚的是在什么情况下send()会抛出一个EWOULDBLOCK,以及处理这样一个事件的正确程序是什么?

如果send()抛出一个EWOULDBLOCK,守护进程是否应该从该事件继续前进到下一个事件?使用像epoll这样的轮询接口,当描述符准备好写入时会触发一个新事件吗?

c sockets epoll

5
推荐指数
1
解决办法
4993
查看次数

LRU缓存在C中

对于C应用程序(在*nix环境中),我需要在内存中缓存大量(但可变)的小(1千字节到10兆字节)文件.因为我不想吃掉所有内存,所以我想设置硬内存限制(例如,64兆字节)并将文件推送到以文件名为键的哈希表中,并以最少的使用率处理条目.我认为我需要的是一个LRU缓存.

真的,我宁愿不自己动手,所以如果有人知道我在哪里可以找到一个可行的图书馆,请指明方向?如果不这样,有人可以在C中提供LRU缓存的简单示例吗?相关帖子表明一个哈希表有一个双向链表,但我甚至不清楚双链表如何保持LRU.

旁注:我意识到这几乎就是memcache的功能,但它不适合我.我还看了一下希望在LRU缓存上启发自己的消息来源,但没有成功.

c caching

4
推荐指数
1
解决办法
1万
查看次数

Lua C API和metatable函数

我在一个C应用程序中使用Lua,我有两个表.我想创建一个第三个表,它是空的,将索引前两个表中的值.我在Lua中写了以下简单示例 -

a = { one="1", two="2" }
b = { three="3", four="4" }

meta = { __index = function(t,k)
  if a[k] == nil then return b[k]
  else return a[k] end
end }

c = {}
setmetatable(c, meta)

print(c.one) -- prints "1"
print(c.four) -- prints "4"
Run Code Online (Sandbox Code Playgroud)

我的问题是,从C API执行此操作的最有效方法是什么?我已经能够通过创建一个新表,将上面的Lua代码块推送到该表,然后在其上调用setmetatable(),但这似乎不是最佳的.有没有更好的办法?

c lua

4
推荐指数
1
解决办法
8564
查看次数

标签 统计

c ×4

antlr ×1

caching ×1

epoll ×1

flex-lexer ×1

lex ×1

lua ×1

parsing ×1

sockets ×1