2014-01-29 19 views
0

我正在研究一個簡單的解釋器,以瞭解更多關於它們如何工作的信息。處理解釋器的多參數操作碼

我有幾個方面我不確定。

我該如何處理不同參數的操作碼?

我能有這樣的:

void execute(int opcode, int arg1, int arg2, int arg3, Machine m); 

然而這樣的:

-Limits me to 3 args 
-Forces me to supply dummy args for opcodes taking less args 

什麼方式(S)口譯員通常面對呢?

我當然可以推一個int數組,但我想知道是否有更好的方法。

謝謝

回答

1

使用可變參數表示法。

定義你的方法,例如:

void execute(int opcode, Machine m, int... args); 

,現在你可以用args工作就像int數組(int[])。

這意味着,所有這些符號將工作:

execute(opcode, m, arg1); 
execute(opcode, m, arg1, arg2); 
execute(opcode, m, arg1, arg2, arg3); 
execute(opcode, m, arg1, arg2, arg3, arg4); 

重要提示:如果你有兩個相同類型的參數,其中之一是一個可變參數,那麼你將不得不把可變參數後面的奇一個來防止混淆。如Elliot正確指出的那樣:當有其他參數時,它必須是最後一個參數。

+0

一個解釋,只有最後一個參數可以是可變長度。 –

+0

@ElliottFrisch:好點,我認爲它只與相同類型的變量有關。 –

+0

在其他語言中可能如此。另一個需要注意的是,可變參數使參數完全可選,所以'execute(opcode,m);'也是有效的。 –