2016-03-30 10 views
0

私はJavaCCパーサを生成するコードを書いています。これはユーザの入力を読み込み、自分のコードで定義された言語のセットのいずれかに入っているかどうかを調べます。ユーザーの入力が空であるかどうかを確認するにはどうすればよいですか?

許容できる入力条件は、空であってはならないということです。つまり、ユーザーは空白以外の文字ブロック(長さが1以上)を入力する必要があります。" "

私は、ユーザーの入力が空であるかどうかを判断して、その場合にエラーメッセージを画面に出力できるようにしたいと考えています。

私はユーザーの入力を取得するプロダクション(a.k.aルール)を作成しました。 Input()と呼ばれ、無効と宣言されています。 mainメソッドで は、私が書くことによって、ユーザーの入力が空であるかどうかを判断するコードを記述しようとしています、

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

は、しかし、私は私がコンパイルしようと、端末上のエラーメッセージが表示されますことを知らせます'void'型はここでは許されません(これはInputを参照していると確信しています)。

この問題を回避するためのヒント/ヒントを教えてください。別のオプションは、あなたの入力内のデータを検証することです

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

:これは値を返すことができますし、あなたがこれを行うときに、結果を検証することができますが、このような比較を変更するよう

+1

voidメソッドは値を返しません。したがって、void関数から返された値をnull(または他の何か)と比較することは意味をなさない。これは、コンパイラがエラーを報告している理由です。 –

答えて

2

はその後、mainメソッドでは、あなたが

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

を書くことができます。これは、エラーを報告する問題を解決するこの

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

のような入力生産を書きます。

しかし、見つかった言語を報告することもできます。そのためには列挙型を作成し、Inputに列挙のメンバを返します。 EMPTYも可能性があります。

Language lang = parser.Input() ; 
switch(lang) { 
    case EMPTY: 
     ... // report error 
    break ; 
    case LANGA: 
     ... 
    break ; 
    ... // etc. 
} 
1
はあなたのタイプの方法を変更し

あなたはそれを空のように保ちます。

関連する問題