是否有YACC文件的文件包含机制?

时间:2013-03-28 16:58:42

标签: c sed bison yacc

我有三个程序当前正在使用YACC文件来进行配置文件解析。为简单起见,它们都读取相同的配置文件,但是,它们每个都唯一地响应键/值(因此相同的.y文件不能用于多个程序)。如果我想要添加一个令牌,我必须更改3个文件,那么不必为每个声明重复%token声明会很好。今年是几年?

这些方法无效或给我带来问题:

  1. C预处理器显然是在我们YACC文件之后运行的,因此#include或其他宏的#define将无效。

  2. 我尝试使用sed编写类似的内容:

  3. REPLACE_DATA=$(cat <file>)

    NEW_FILE=<file>.tmp

    sed 's/$PLACEHOLDER/$REPLACE_DATA/g' <file> > $NEW_FILE

    然而,似乎它在REPLACE_DATA中剥离了我的换行符,然后没有替换$PLACEHOLDER的实例而不是替换变量PLACEHOLDER的内容。

    YACC中是否有真正的包含机制,还是有其他我缺少的解决方案?这是一个维护噩梦,我希望其他人遇到类似的情况。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是来自http://www.grymoire.com/Unix/Sed.html#uh-37

的sed版本
#!/bin/sh
# watch out for a '/' in the parameter
# use alternate search delimiter
sed -e '\_#INCLUDE <'"$1"'>_{
    r '"$1"'
    d
}'

但传统上,我们在yacc之前使用了m4预处理器。