Ich mache einen grundlegenden lexikalischen Analysator in Java
für mein Semester Projekt und ich bin auf Konflikt auf einem Konzept mit meinem Fachlehrer.Ist die Zeichenfolge "1a" ein Fehler für den lexikalischen Analysator oder nicht?
Meine Ansicht ist, in der Regel, dass, wenn eine Eingabe wie „1a“ zu Lexer gegeben wird, dann sollte es Ausgang geben wie:
"<Number><Identifier>"
Aber mein Lehrer sagt, dass es sollte Fahne dies als Fehler, weil es, anstatt es als Zahl und Bezeichner zu behandeln, die ganze Zeichenfolge (zB "1a") als Fehler kennzeichnen sollte. Dies liegt daran, dass (wie er sagt) Bezeichner nicht mit einer Zahl beginnen können.
Im Gegenteil, ich denke, das sollte in der Verantwortung der nächsten Stufe des Compilers (Syntaxanalysator) sein, um zu entscheiden, ob etwas eine gültige Kennung ist oder nicht. Ich weiß, dass er recht hat mit Bezeichnern, die nicht mit einer Zahl beginnen, aber ich brauche einen Teil davon, dass der lexikalische Analysator derjenige sein sollte, der das entscheidet.
Ich werde Ihre Hilfe wirklich zu schätzen wissen. Danke
Warum kann der lexikalische Analysator '1' nicht lesen und bleibt dann bei 'a' als Zahl '1' stehen, beginnt von vorne und liest 'a' und markiert ihn als Kennung. Ist das nicht ein Trennzeichen für die NFA, die sich mit Zahlen beschäftigt? – Cheeta
Ich würde sagen, die Tokenisierung geschieht mit vordefinierten Trennzeichen, normalerweise mit Leerzeichen. Damit der lexikalische Analysator die Zeichenfolge in 1 und a aufteilt, müssten wir zusätzliche Regeln dafür definieren. Ich denke, was Ihr Lehrer im Sinn hat, ist, dass 1a ein Token ist und da es keinen regulären Ausdruck für einen Bezeichner findet, gibt der lexikalische Analysator einen Fehler aus. –
Hängt davon ab, wie der lexikalische Analysator geschrieben wird. Durch die Verwendung von flex ist es sehr einfach, einen lexikalischen Analysator zu erzeugen, der 1a als Zahl analysiert, gefolgt von einem Identifikator. – Eelke