我知道如何使用flex或bison生成C扫描程序代码,但不幸的是,我需要一个C代码来读取&& -write-配置文件,但是我无法用flex或bison生成这样的代码,可能我可以使用配置文件读/写库,但我认为当我想自定义配置文件的格式时它不灵活,所以任何提示?
答案 0 :(得分:1)
我知道没有这样的专用工具,仅仅因为它并不是那么难的工作。
您对输入进行词汇和语义分析的原因是因为您必须将某些复杂(具有错误可能性的自由格式文本)转换为简单的内容(没有错误的内存中表示)
另一种方式通常要简单得多,因为您只需单步执行内存中的结构并输出其字符串表示形式即可。一个简化的例子,假设您的配置文件包含以下行:
define xyzzy integer size 5 is 1 3 5 7 9 ;
创建一个名为xyzzy
的数组,其中包含五个元素。
在输入时,您必须将字符流标记(词法分析)为:
keyword:define
name:xyzzy
keyword:integer
keyword:size
constant:5
keyword:is
constant:1
constant:3
constant:5
constant:7
constant:9
keyword:semicolon
然后使用语义分析将其转换为您可以在程序中使用的表单,例如结构:
type = array
name = xyzzy
underlyingtype = integer
size = 5
element[1..5] = {1,3,5,7,9}
现在,将 out 返回到配置文件相对容易。您只需浏览所有内存结构,例如:
for each in-memory-thing imt:
if imt.type is array:
output "define ", imt.name, " ", imt.underlyingtype
output " size ", imt.size, " is "
for i = 1 to imt.size inclusive:
output imt.element[i], " "
output " ;" with newline
fi
// Handle other types of imt here
rof
所以你可以看到写入配置文件的行为比从它重新编写容易得多。