2016-03-30 19 views
0

我正在編寫代碼來生成一個JavaCC分析器,它將讀取用戶的輸入並檢查它是否是我的代碼中定義的任何一種語言。如何確定用戶的輸入是否爲空?

允許輸入的一個條件是它不能爲空 - 即用戶必須輸入除空白區域" "以外的某些字符塊(長度大於或等於1)。

我希望能夠確定用戶的輸入是否爲空,以便在這種情況下可以在屏幕上打印出錯誤消息。

我寫了一個製作(a.k.a規則)來獲取用戶的輸入;它被稱爲Input()並被宣佈爲無效。 在main方法,我試圖通過寫入來編寫代碼,其確定用戶的輸入是空的,:

if parser.Input() == null { 
    // print error message onto the screen 
} 

然而,我得到當我試圖編譯終端上顯示錯誤消息,指出一個'空'類型不允許在這裏(我相信這是指輸入)。

請問有關於解決此問題的提示/提示嗎?

+1

void方法不返回任何值。因此,將從void函數返回的值與null(或其他)進行比較是沒有意義的。這就是編譯器報告錯誤的原因。 –

回答

2

寫輸入生產這樣

boolean Input() : { 
} { 
    <EOF> 
    {return true;} 
| 
    ... // other possibilities here 
    {return false;} 
} 

然後,在main方法,你可以寫

if(parser.Input()) { 
    ... // report error 
} 

這解決了報告錯誤的問題。

但是,您可能還想報告找到的語言。爲此,您可以創建枚舉類型並使Input返回枚舉成員。 EMPTY可能是其中一種可能性。

Language lang = parser.Input() ; 
switch(lang) { 
    case EMPTY: 
     ... // report error 
    break ; 
    case LANGA: 
     ... 
    break ; 
    ... // etc. 
} 
1

更改類型的方法所以這可以返回一個值,你可以驗證的結果,當你這樣做,但改變這樣的比較:

if null==parser.Input(){ //print error message on screen }

另一種選擇是,以驗證您輸入的內部數據方法,所以你保持它像空白。