ich möchte euch mal mein neues größeres Projekt vorstellen. Es geht um ein Lexer- und ein Parsergenerator für PB. Was ist das genau?
Wer sich schonmal mit syntaktischer Analyse von Texten befasst hat, weiß wie kompliziert und aufgebläht so ein Programm werden kann. Selbst ein kleines Programm, dass z.B. ein mathematischen Ausdruck analysieren und berechnen soll, kann sehr schnell sehr unübersichtlich werden, ganz zu schweigen von einem Compiler einer neuen Programmiersprache.
Und genau hier setzen meine Programme an. Sie bieten eine sehr einfache Möglichkeit, die Syntax der Texte, die analysiert werden sollen, mit RegEx's und einer Grammatik zu beschreiben. Die beiden Generatoren erstellen damit dann einen funktionierenden Lexer und Parser.
Damit man eine Vorstellung hat, hier mal ein kleines Beispiel, wie so ein Programm aussehen würde, das mathematische Ausdrücke analysieren kann.
Lexer.pb:
Code: Alles auswählen
%%
<<EOF>> { ProcedureReturn §<EOF> }
[ \t] { } ; ignore char
[0-9]+ { ProcedureReturn §NUMBER }
[+\-*/] { ProcedureReturn Asc(yytext) } ; operators
. { yyerror("Invalid char: "+yytext) }
%%
Code: Alles auswählen
%token NUMBER
%left '+' '-'
%left '*' '/'
%type eval exp
%start eval
%%
exp: ;[
NUMBER
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
;]
eval: exp
%%
Code: Alles auswählen
IncludeFile "Parser_out.pb"
IncludeFile "Lexer_out.pb"
Procedure EvalString(string.s)
*yyin = @string
Debug yyparser()
EndProcedure
EvalString("2 + 3 * 4")
- Starte "PBMakeTool\PBMakeToolInstaller.exe" und drücke auf "Installieren" (installiert Tools in der PB-IDE)
- Starte "PBGenerators\Tutorial\Rechner\Rechner.pb" aus der PB-IDE
Für diejenigen, die sich näher mit dem Thema beschäftigen wollen, habe ich ein kleines Tutorium geschrieben, das die Entwicklung des Beispiels beschreibt.
Noch ein paar Worte zum PBMakeTool: Es ist ein Zusatztool, dass man in der PB-IDE installieren kann, damit die Generatoren beim Starten eines Programms mit einem Lexer/Parser aufgerufen werden. Siehe dazu mehr Details in der Readme zum PBMakeTool.
Also ich kann die Generatoren sehr empfehlen, wenn man mal die Syntax eines Textes analysieren, oder gar ein Compiler einer neuen Sprache entwickeln will. Ich selbst hab sie schon bei einem selbstgeschriebenen Computer Algebra System und einem Grundgerüst einer neuen Sprache benutzt, und kann es mir inzwischen nicht mehr wegdenken . Sie sind also bereits in der Wildnis erprobt .
Für Fragen, Verbesserungsvorschläge, Wünsche und Lob ( ) bin ich natürlich offen.
Hier nun der Link:
http://cshw89.mevedia.de/PBGenerators.zip
lg Kevin
PS:
Ein paar allgemeine Informationen zu Generatoren:
http://de.wikipedia.org/wiki/Compilerbau
http://de.wikipedia.org/wiki/Lex_%28Informatik%29
http://de.wikipedia.org/wiki/Yacc