2015-05-04 50 views
0

我正在使用m4預處理器,命令行選項--synclines。該選項在每個擴展多行之後發出#line <nn>行。如何更改m4的--synclines選項的註釋符號?

實施例:

; sr0(<register>, <count>) unrolls the sr0 statement for <register> <count> times. 
sr0(reg_0, 3) 
sr1 reg_1 

結果:

#line 1 "test.psm" 
; sr0(<register>, <count>) unrolls the sr0 statement for <register> <count> times. 
sr0 reg_0 
#line 2 
sr0 reg_0 
#line 2 
sr0 reg_0 
#line 2 
sr1 reg_1 

由於SR0(reg_0,3)起源於第2行,M4每個擴展之後添加#line 2

如何將註釋符號#更改爲;,因爲彙編程序不支持#作爲註釋符號。

回答

0

如果你不介意使用sed,假設由m4產生的代碼在test.psm

$ sed 's/^#/;/' <test.psm 
;line 1 "test.psm" 
; sr0(<register>, <count>) unrolls the sr0 statement for <register> <count> times. 
sr0 reg_0 
;line 2 
sr0 reg_0 
;line 2 
sr0 reg_0 
;line 2 
sr1 reg_1 
+0

我想獲得一個唯一的M4的解決方案。使用sed或其他工具運行第二個處理步驟是可能的,但這不是希望的解決方案,因爲它涉及第二個工具,臨時文件或標準輸入/標準輸出流水線。 – Paebbels

+0

只有'm4'才能用''line'替換'#line',但是這需要a)使用'changeword'來允許使用包含'#'的宏他們的名字(這是實驗性的,所以並不總是可用的,如果可用的話它可能會發生變化),以及b)它需要將來自'm4'的輸出輸送到'm4'的第二個實例來改變'#line '到'; line'(涉及使用流水線,你想避免)。 – Simon

+0

我沒有辦法改變使用'm4'的命令行參數的向列輸出,但是鑑於'm4'是自由軟件,你可以修改源代碼並重新編譯一個自定義版本的'm4'輸出'; line '而不是'#line'作爲向列。除非使用流水線在您的上下文中根本不可能,否則我不會推薦這種方法,而是建議使用流水線。 – Simon