【发布时间】:2010-06-11 18:32:13
【问题描述】:
我正在编写一个 C/C++/... 构建系统(我知道这很疯狂 ;)),但我在设计我的解析器时遇到了麻烦。
我的“食谱”如下所示:
global
{
SOURCE_DIRS src
HEADER_DIRS include
SOURCES bitwise.c \
framing.c
HEADERS \
ogg/os_types.h \
ogg/ogg.h
}
lib static ogg_static
{
NAME ogg
}
lib shared ogg_shared
{
NAME ogg
}
(这是基于超级简单的 libogg 源码树)
# 是 cmets,\ 是“换行符转义”,表示该行在下一行继续(参见 QMake syntac)。 {} 是作用域,就像在 C++ 中一样,全局是适用于每个“目标”的设置。这都是背景,与 无关……我真的不知道如何使用我的示波器。我将需要能够有多个范围,以及一种条件处理形式,如下所示:
win32:DEFINES NO_CRT_SECURE_DEPRECATE
解析函数需要知道它所处的范围级别,并在范围增加时调用自身。大括号的位置也存在问题(global { 或 global{ 或如示例中所示)。
如何使用标准 C++ 和 STL 来解决这个问题?我知道这是一项艰巨的工作,这正是我需要一个好的起点的原因。谢谢!
我已经拥有的是整个 ifstream 和内部字符串/字符串流存储,所以我可以逐字阅读。
【问题讨论】:
-
这需要通常的编译器/解释器方法,并且可能应该使用标准工具来处理(请参阅stackoverflow.com/questions/1669/learning-to-write-a-compiler 并搜索“解析器生成器”等)。
-
相关链接肯定会帮助我形成一个想法。