我有三个程序当前正在使用YACC文件来进行配置文件解析。为简单起见,它们都读取相同的配置文件,但是,它们每个都唯一地响应键/值(因此相同的.y文件不能用于多个程序)。如果我想要添加一个令牌,我必须更改3个文件,那么不必为每个声明重复%token
声明会很好。今年是几年?
这些方法无效或给我带来问题:
C预处理器显然是在我们YACC文件之后运行的,因此#include
或其他宏的#define
将无效。
我尝试使用sed
编写类似的内容:
REPLACE_DATA=$(cat <file>)
NEW_FILE=<file>.tmp
sed 's/$PLACEHOLDER/$REPLACE_DATA/g' <file> > $NEW_FILE
然而,似乎它在REPLACE_DATA
中剥离了我的换行符,然后没有替换$PLACEHOLDER
的实例而不是替换变量PLACEHOLDER
的内容。
YACC中是否有真正的包含机制,还是有其他我缺少的解决方案?这是一个维护噩梦,我希望其他人遇到类似的情况。提前谢谢。
答案 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预处理器。