我试图解析简单的Lisp/scheme-like代码
E.g. (func a (b c d) )
Run Code Online (Sandbox Code Playgroud)
从中构建一个树,我可以在不使用的情况下在C中进行解析bison
(即,仅
flex
使用返回标记并使用递归构建树).但是,使用bison
语法,我不知道在哪里添加代码来构建列表(即,与累积终端符号相关联的规则以及将构建列表链接到父节点的位置).
在我的应用程序中,我从C后端公开了所有Lua库.现在,我需要加载一个Lua模块.对此的方法似乎是:
lua_getglobal(L, "require");
lua_pushstring(L, libname);
lua_pcall(L, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
将搜索package.path
以查找<libname>.lua
并加载它.
是否可以将Lua模块内置到C应用程序中(以便模块成为C应用程序的一部分)?所以我不必单独打包Lua模块.不知何故,我无法找到任何参考或示例!:(
ps我正在使用LuaJIT-2.0.2
,有问题的库是SciLua/Time
(使用ffi
)
我正在实现Patricia尝试进行IP前缀查找,我可以使代码工作以完成密钥匹配,但是当存在其他密钥的前缀时,如前面的搜索有问题,例如:
1.2.3.0
1.2.0.0
Run Code Online (Sandbox Code Playgroud)
在上述情况下,任何人都可以帮助我使用前缀搜索算法我应该将它们视为单独长度的键(即/ 24和16)吗?
我正在尝试编写一个简单的YAML解析器,我从yaml.org读取规范,在开始之前,我想知道编写手动解析器或者使用lex
(flex/bison
)是否更好.我看了看libyaml
(C库) - 好像没用lex/yacc
.YAML(不包括流样式)似乎更面向行,因此,编写手动解析器或使用flex/bison
Thanks 更容易.
我有一些类似lisp/scheme的代码,我想缩进.我搜索了像GNU这样的工具indent
,但我找不到任何命令行实用程序/脚本.有很多可用于C/C++/Java,但不知何故我无法找到任何lisp/scheme,任何人都可以告诉我任何这样的缩进工具(如果可用).
谢谢.
我有一个全局表,我希望在两个不同的Lua 状态之间保持同步.从我所阅读和理解的,唯一的方法似乎是,在我的C后端,在状态之间执行表的深层复制(如果表已被修改).有没有更好的办法 ?另外,我看到一些Lua片段用于表格深层复制,但不是在C中,是否有任何库[在C]中执行此操作?
PS我不是在找lua_thread
基础解决方案(我已经在使用它了)
PPS Lua Lanes似乎很接近,但IMO似乎太多了,因为我只想同步1张桌子!
根据lua 5.1手册,lua_xmove
在属于相同Lua状态的不同线程的堆栈之间移动值.但是,我偶然碰巧使用它来移动不同Lua状态的值,它似乎工作正常!是否有任何其他API可以将值从一个Lua状态移动到另一个Lua状态(在5.1中),还是可以lua_xmove
使用?
我有以下代码片段,将文件按原样复制到构建目录:
for m in std_mibs:
print("Copying", m)
bld(name = 'cpstdmib',
rule = 'cp -f ${SRC} ${TGT}',
#source = m + '.mib',
source = bld.path.make_node(m + '.mib'), # <-- section 5.3.3 of the waf book
target = bld.path.get_bld().make_node(m + '.mib')
)
Run Code Online (Sandbox Code Playgroud)
我看到这条规则虽然(从打印中)被命中,但副本似乎并没有发生!我还更改了源以使用如图所示的 waf 书第 5.3.3make_node
节中的示例,但仍然没有运气!我在这里错过了一些明显的东西吗!?
另外,在此之后我有一些规则,这些规则依赖于复制的文件,并且我尝试添加一个干预
bld.add_group()
Run Code Online (Sandbox Code Playgroud)
如果复制成功,我希望测序能够成功
我正在尝试在X86_64 Linux上进行一些测试,并且我想知道如何使malloc()分配大于4 GiB范围内的返回地址
我是否必须使用单独的/自定义库覆盖malloc还是有其他简单的方法来做到这一点?
谢谢。
- - 编辑 - -
我感兴趣的是将地址当作值(uintptr_t
)时的地址,它的虚拟地址还是物理地址都没有关系,因为我想要的就是该地址必须是大于4GiB 的值
我在Linux x86_64上将gcc
(4.2.1)与一起使用-m64
(希望我把问题弄清楚了)
我正在尝试这样做:
从目录中选择所有C
( .c
) 文件,生成.o
并将其添加到我的最终目标可执行文件中。这些C
文件可以随时添加或删除,因此当我make
为我的目标运行时,必须C
从目录中挑选可用的文件来编译并链接到我的目标。
到目前为止,我有以下几点:
define test_tgt =
DIR = full/path/to/dir
FILES = $(wildcard $(DIR)/*.c)
OBJS = <rule-to-convert-C-to-O>
endef
get_new_files:
$(eval $(test_tgt))
final-target: get_new_files
$(CC) <other-objs> $(OBJS)
Run Code Online (Sandbox Code Playgroud)
不知何故,这似乎不起作用。我看到很多类似的例子,但不确定这里有什么问题。如果这种方法不正确,任何人都可以提出更好的方法来实现这一点。
TIA。
lua ×3
bison ×2
flex-lexer ×2
lisp ×2
parsing ×2
c ×1
copy ×1
gnu-make ×1
indentation ×1
ip ×1
lex ×1
lookup ×1
lua-table ×1
luajit ×1
makefile ×1
malloc ×1
s-expression ×1
sequencing ×1
waf ×1
yaml ×1