是否有针对YACC文件的文件包含机制



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

这些方法不工作或给我问题:

  1. C预处理器显然是在我们YACC文件之后运行的,所以#define或其他宏的#include将不起作用。

  2. 我试过用sed编写类似的脚本:

REPLACE_DATA=$(cat <file>)

NEW_FILE=<file>.tmp

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

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

是否有一个真正的包含机制在YACC,或者有其他的解决方案,我错过了?这是一场维护噩梦,我希望其他人也遇到过类似的情况。

下面是来自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预处理器

最新更新