2015-01-14 40 views
0

我想用僞代碼編寫一個程序,它將識別C/C++源文件中「#」或「%」的不正確使用。 聽起來很簡單,但我不確定如何在「僞代碼」中寫入/描述該符號出現的位置,例如是否在變量名稱前/後。用於處理錯誤的僞代碼程序

我應該使用類似:

If "#" after var_a 
     then "Error!" 
    elseif before ";" 
     .... and so on 

,或者我應該使用類似#_ASCII_code is_after「符號」 ......

我真想不通怎麼在僞描述這些特定的情況下碼。

我不得不提到我瞭解在互聯網上的僞代碼。(我已經使用搜索按鈕)

預先感謝您。

+0

C中的僞代碼?你的意思是使用宏來解壓縮代碼中的某些東西? – Gopi

+0

c和C++的源代碼在解析上會有很大的不同。 –

+1

不會。假設您有一個包含錯誤的C源文件(只允許C,而不是C++)。僞代碼程序的想法是描述編譯器如何注意到這些錯誤以及它應該如何處理它們。 – utiliopt

回答

2

您的方法不起作用,因爲它是too simple。該解決方案是一種稱爲多步方法「parsing」,直到最終獲得一個AST

  • 首先,需要將字符的流轉換源文件中成標記(b = a ++ - >ID ASSIGN ID INCREMENT)。
  • 然後您需要LL parser將這些轉換爲更高級別的規則。整個源文件的規則通常稱爲AST - Abstract Syntax Tree

那棵樹現在允許你寫的僞代碼:

For all AST nodes with the text representation "#" 
    if the previous sibling is a variable 
     ... 
    else if the next sibling is ";" 
     ... 
+0

我真的很喜歡你的引用!但在OP說明他想做什麼之前,我不確定他是否真的需要一個完整的解析器。特別是因爲它是一個教師任務... –

0

的僞碼規範的一種形式。如果用僞代碼寫這個規範太困難了,那麼先用自然語言編寫它,例如「所有的變量都應該用'#'來表示。」從中自動得出一個不以'#'爲前綴的變量是一個錯誤。

編寫規範可以確保問題描述得很好。在此之後,您可以從僞代碼開始,然後這是一種設計形式,您最終可以編寫真正的程序,可以使用任何語言或機制。例如,您可以決定該解決方案是否適用於yacc腳本,或者它足夠簡單,您可以直接在C或C++中對其進行編碼。

由於僞代碼沒有很好的定義,它可能導致需求在這個僞實現中描述得很差。從一個糟糕的僞執行轉變爲一個真正的執行然後導致糟糕的實現(另見:錯誤)。

也許最好不要使用僞代碼。