2012-04-03 12 views
1

Ich denke darüber nach, wie man einen Lexer-Generator schreibt. Ich kann mir keine einfache Möglichkeit vorstellen, die Schlüsselwörter einer Sprache anhand ihrer Grammatik zu identifizieren. Offensichtlich sind alle Schlüsselwörter Terminals, aber nicht alle Terminals sind Schlüsselwörter. Zum Beispiel in der folgenden einfachen Grammatik: truth_value -> 'true' | 'falsch'; Ziffer -> '0' .. '9'; 'true' und 'false' sind Schlüsselwörter, aber '0', '1' usw. sind nicht.Wie identifiziert ein Lexer-Generator die Schlüsselwörter einer Grammatik?

Jede Hilfe wird geschätzt.

Antwort

1

meisten Lexer Generatoren benötigen die Programmierer reguläre Ausdrücke zu schreiben (oder so ähnlich) die Schlüsselwörter (und andere Endgeräte) zu identifizieren. Ich habe noch nie von einem gehört, der versuchte, von einer formalen Grammatik auszugehen und die Schlüsselwörter selbst herauszufinden.

Zum Beispiel, hier ist Teil einer .l Datei (lex/flex) Eingabedatei für einen Rechner ich vor Jahren schrieb:

sqrt { return SQRT; } 
lg  { return LN2; } 
log  { return LOG; } 
sin  { return SIN; } 
cos  { return COS; } 
tan  { return TAN; } 
pi  { return PI; } 
exit { return EXIT; } 
prec { return PREC; } 
print { return PRINT; } 
\?  { return PRINT; } 
[ \t] { ; } 

[-+*/=()^] { return yytext[0]; } 
\n   { lineno++; return yytext[0]; } 
+0

Sie meinen, explizit die Schlüsselwörter erklären, auch wenn sie in einigen Umschreiben verwendet haben Regeln sowieso? –

+0

@prophet_on_that: Wenn ich richtig verstehe, ja. Siehe Beispiel in bearbeiteter Antwort. –

+0

Danke, das hilft. –