2016-03-30 12 views
0

Ich schreibe Code, um einen JavaCC-Parser zu generieren, der die Eingaben eines Benutzers liest und prüft, ob es sich um einen der in meinem Code definierten Sprachen handelt.Wie kann ich feststellen, ob die Benutzereingabe leer ist?

Eine Bedingung für die zulässige Eingabe ist, dass sie nicht leer sein darf - d. H. Der Benutzer muss einen anderen Zeichenblock (mit einer Länge größer oder gleich 1) als Leerraum " " eingeben.

Ich möchte feststellen können, ob die Eingabe des Benutzers leer ist, so dass eine Fehlermeldung auf dem Bildschirm in diesem Fall ausgedruckt werden kann.

Ich habe eine Produktion geschrieben (a.k.a Regel), die die Benutzereingabe erhält; Es heißt Input() und wird für ungültig erklärt. Im Hauptverfahren, ich habe versucht, Code zu schreiben, wenn die Eingabe des Benutzers bestimmt leer ist, durch Schreiben:

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

Allerdings bekomme ich eine Fehlermeldung auf dem Terminal, wenn ich versuche, das besagt, zu kompilieren, dass ein 'void' Typ ist hier nicht erlaubt (ich bin mir sicher, dass es sich um Input handelt).

Könnte ich bitte einen Hinweis/Tipps haben, um dieses Problem zu umgehen?

+1

Eine void-Methode gibt keinen Wert zurück. Daher ist es nicht sinnvoll, den von einer void-Funktion zurückgegebenen Wert mit null (oder irgendetwas anderem) zu vergleichen. Aus diesem Grund meldet der Compiler einen Fehler. –

Antwort

2

Schreiben Sie die Eingabe Produktion wie diese

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

Dann wird in der Hauptmethode, Sie

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

Dies löst das Problem der Berichterstattung über die Fehler schreiben.

Sie können aber auch die gefundene Sprache melden. Dafür könnten Sie einen Aufzählungstyp erstellen und Input ein Mitglied der Aufzählung zurückgeben. EMPTY könnte eine der Möglichkeiten sein.

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

Ihre Art Methode ändern, um diesen einen Wert zurückgeben kann, und Sie können das Ergebnis bestätigen, wenn Sie dies tun, aber den Vergleich wie folgt ändern:

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

Eine weitere Option Daten in Ihrem Eingang zu validieren Methode, so halten Sie es wie leer.

Verwandte Themen