3

現在、構成ファイルの解析を行うために YACC ファイルを使用している 3 つのプログラムがあります。簡単にするために、それらはすべて同じ構成ファイルを読み取りますが、それぞれが一意にキー/値に応答します (したがって、同じ .y ファイルを複数のプログラムに使用することはできません)。それぞれの宣言を繰り返す必要がないのはいいことです%token.1つのトークンを追加したい場合、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てインスタンスを置き換えないようです。 $PLACEHOLDERPLACEHOLDER

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 に答える