3

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

这些方法不起作用或给我带来了问题:

  1. C 预处理器显然是在我们对文件进行 YACC 之后运行的,因此#include对于一个#define或其他宏将不起作用。

  2. 我尝试使用以下脚本编写类似的内容sed

REPLACE_DATA=$(cat <file>)

NEW_FILE=<file>.tmp

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

但是,它似乎是在删除我的换行符,REPLACE_DATA然后不替换实例$PLACEHOLDER而不是替换 variables 的内容PLACEHOLDER

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

4

1 回答 1

2

这是来自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 预处理器。

于 2013-05-16T17:34:33.580 回答