Seite 1 von 1

Aufgabe 1.6: Verhalten bei "0xyz"

Verfasst: 22. Nov 2011 23:38
von jgdo
Hallo,

wir würden gerne Wissen, was genau bei "0xyz" passieren soll.

Nach dem aktuellen Stand vom Triangle-Compiler wird "123abc" nämlich zu den beiden Tokens INTLITERAL:„123“und IDENTIFIER:„abc“gescannt. Denn sobald nach der Zahl das erste Zeichen kommt, bricht die Methode scanToken ab und gibt das INTLITERAL „123“zurück. Wenn dann das nächste mal scan() aufgerufen wird, ist das aktuelle Zeichen kein Separator, also wird direkt wieder scanToken() aufgerufen. Diese sieht einen Buchstaben und scannt daher den Identifier.

Wenn man jetzt aber Hexliterale der Form 0x(Digit)+ hat, kann folgendes passieren: es wird eine 0 gescannt. Nun gibt es 2 Möglichkeiten: das ist der Anfang vom INTLITERAL oder der Anfang vom HEXLITERAL. Das Zeichen wird genommen (takeIt) und auf das nächste Zeichen geschaut. Angenommen es ist ein x. Hier gibt es wiederum 2 Möglichkeiten: es ist ein HEXLITERAL (z.B. 0x123) oder aber ein INTLITERAL gefolgt von einem IDENTIFIER (z.B. 0xyz). Der Lexer kann jedoch nicht entscheiden, was von den beiden es ist, ohne auf das nächste Zeichen zu schauen (1->HEXLITERAL, y->INTLITERAL, IDENTIFIER). Um auf das nächste Zeichen zu schauen, müsste er das x akzeptieren. Doch falls er das macht, und nach dem 0x ein y folgt, müsste er das INTLITERAL "0“ zurückgeben und das bereits akzeptierte x wieder zurücklegen. Und eben das sieht die aktuelle Lexer-Konstrukion grundsätzlich nicht vor.

Deshalb wäre jetzt unsere Frage, wie wir da verfahren sollen, also ob z.B. 0xyz einen Fehler erzeugen sollte oder nicht. So wie die Aufgabe da steht, scheint sie unlösbar zu sein.

MfG Mark

Re: Aufgabe 1.6: Verhalten bei "0xyz"

Verfasst: 23. Nov 2011 12:08
von tobiwan
Hey,

bei der Aufgabe 1.6 gibt es doch genau ein Problem, welches einen dazu zwingt, vom Schema-F abzuweichen.
Vielleicht ist es ja genau das Problem, das du ansprichst? :wink:

Grüße,
Tobias