2013-03-28 30 views
3

我有三個程序當前正在使用YACC文件來執行配置文件分析。爲了簡單起見,它們都讀取相同的配置文件,但是,它們每個都唯一地響應鍵/值(所以相同的.y文件不能用於多於一個的程序)。如果我想添加一個令牌,我必須更改3個文件,這將是很好的,不必重複每個人的%token聲明 - 如果我想添加一個令牌,哪一年呢?爲#define或其他宏將無法正常工作YACC文件是否有文件包含機制?

  1. 了C預處理明顯運行後,我們YACC文件,所以#include

    這些方法不工作或者是給我的問題。

  2. 我試圖腳本了類似的東西使用sed

REPLACE_DATA=$(cat <file>)

NEW_FILE=<file>.tmp

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

但是似乎它剝我的換行符REPLACE_DATA和那麼不會替換0的實例而不是替換變量PLACEHOLDER的內容。

YACC中是否存在真正的包含機制,還是我還缺少其他解決方案?這是一個維護噩夢,我希望別人遇到類似的情況。提前致謝。

+2

[btyacc](http://www.siber.com/btyacc/)支持'%include'指令。 –

+1

您需要引用REPLACE_DATA以使其不被剝離。你不能用一個單引號''替換變量,但必須使用雙引號'''。我認爲這不會有幫助。你可以嘗試'cat> output << EOF \ n preample \ n $(echo 「$ REPLACE_DATA)\ npostamble」'或使用另一種腳本語言 –

+0

Nice Chris。[bisoncpp](http://bisoncpp.sourceforge.net/bisonc++05.html#INCLUDE)。 –

回答

1

這裏是從http://www.grymoire.com/Unix/Sed.html#uh-37

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

一個SED版本,但傳統上,我們YACC之前使用的M4預處理器。

相關問題