我在大學時分配了一個奇怪的項目。我被要求從一個給定的輸入'C'程序中提取變量定義和引用。從'C'程序中提取變量定義和變量引用
輸入程序中的每一行在開頭都包含相應的行號,後面跟着一個空格,然後開始實際代碼。
考慮下面的程序..
1 int main()
2 {
3 int a,b,c;
4 printf("Enter the values of a and b\n");
5 scanf("%d%d",&a,&b);
6 c=a+b;
7 printf("The sum of two numbers is %d",c);
8 }
而對於我正在開發的程序的輸入是一個「C」程序,其中單線由單個語句.. 即我們知道整個程序可以寫成一行。但不是在我的情況下,這是一旦有終止(分號),在分號後面的行被轉移到下一行..
無論如何,我的工作是提取變量定義/聲明和變量使用/引用在給定的輸入C程序中。
考慮上述程序, 在行號3中,變量a,b和c是聲明的,因此它必須打印在輸出的「definition」列下。
類似地,在語句5中,a和b的值正在使用scanf語句進行初始化,因此應該在輸出的定義列下打印變量a和b ..
現在考慮語句6,變量c的值正在被初始化/定義,因此c必須打印在定義列下。同時,a和b的值用於確定c ,因此變量a和b必須打印在輸出的「參考」列下。
最後,變量c的值在語句7中被引用/使用,因此變量c必須被打印被引用的列下..
該方案的示例輸出如下所示..
Line Number Defined Variable Referenced Variable
_____________________________________________________________________
1 -- --
2 -- --
3 a,b,c --
4 -- --
5 a,b --
6 c a,b
7 -- c
8 -- --
誰能告訴我如何解決這個問題? 請記住,我需要編寫一個C/C++程序,甚至允許shell腳本的項目.. 我需要考慮數學表達式,邏輯表達式,內置函數調用,用戶定義函數調用和函數定義。 。
在此先感謝..
這是爲什麼類的?這個練習的目的是什麼? – 2011-04-16 12:46:26
@ ab07:「這類事情發生在我們的大學裏」。你應該問「你(教授)期望我從這項任務中學到什麼」?如果他希望你用除真正的解析器以外的其他方法來做到這一點,我會不知道他的期望是什麼,以及是否有太多的指向。 5f他希望你用解析器來做,而且你不知道解析,你有麻煩。如果他希望你使用真正的解析器,我不明白左邊距中的數字的重點;你確定這是要求的一部分嗎? – 2011-04-16 12:50:45
這是非常不精確的。你用'if'做什麼?你會跨多行傳播if語句嗎?那麼它會不會違反「單行包含單一陳述」的規則?你把它放在同一行,然後嵌套在複合語句中嵌套多個語句嗎?從而在同一行中有多個標量語句? – 2011-04-16 13:47:08