devfoo-one / SEN-WS16-AFPA-UE03_3

0 stars 0 forks source link

Satz ist gültig auch wenn er nicht durch '.' beendet wird. #1

Open devfoo-one opened 7 years ago

devfoo-one commented 7 years ago

Der Eingabewert

Der Computer feuert auf A1

Sollte eigentlich nicht gültig sein, da eine Zeile eigentlich mit einem Punkt beendet werden sollte:

row : zufallsSatz(LineBreak | EOF) | einleitungsSatz koordinate end(LineBreak | EOF) ;
einleitungsSatz : 'Der Computer feuert auf ';
end : '.' ;
LineBreak : '\r'?'\n' | '\r' ;
koordinate : Buchstabe Ziffer ;

Jedoch führt er zu einem Schuss...

line 4:26 missing '.' at '<EOF>'
Der Computer feuert bei dir auf die Koordinaten A1. War das ein Treffer? (j/n)

Lösung wäre hier wohl die Koordinaten erst bei exitRow() zu prüfen Die Frage ist ob wir das ignorieren wollen?

Ich weiß jetzt auf Anhieb nicht wie man im exitRow() wieder an die Koordinaten rankommt. Ist nicht dramatisch, es funktioniert alles, nur so ne Formsache.

robme91 commented 7 years ago

alsoooo ich hatte ein ähnliches problem. Das ding ist, dass antlr keine exceptions schmeißt sondern nur Konsolen ausgaben bei fehlern macht. man müsste dann eine fehlerklasse überschreiben(laut stackoverflow) und darauf hatte ich kein bock und du wsl auch nicht. Allerdings könntest du am Ende jeder zeile, also bei exitRow() einfach ctx.getText() und dann mit den String Methoden dir den letzzten char des satzes geben lassen. Den prüfst du dann equals("."). wäre jetzt die einfachste methode denk ich :D muss ja nicht performant sein. Allerdings musst du bei der letzten row mal gucken, nicht das da ein mir rein rutscht. das passiert wenn man sich den ganzen text ausgeben lässt

devfoo-one commented 7 years ago

Hm... ich lass das hier mal offen aber ich glaube wir könnens ignorieren.