PBLexerGen + PBParserGen

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

PBLexerGen + PBParserGen

Beitrag von CSHW89 »

Hi Leute,
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) }
%%
Parser.pb:

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
%%
Main.pb:

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")
Für diejenigen, die einfach mal schnell was ausprobieren wollen, können dazu ein vorgefertigtes Beispiel benutzen:
- 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 :mrgreen: .
Für Fragen, Verbesserungsvorschläge, Wünsche und Lob ( :wink: ) 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
Zuletzt geändert von CSHW89 am 07.04.2012 15:46, insgesamt 1-mal geändert.
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PBLexerGen + PBParserGen

Beitrag von ts-soft »

:allright:
Aber für sowas bin ich zu dumm :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: PBLexerGen + PBParserGen

Beitrag von Frabbing »

Ich leider auch. Sehe da irgendwie keinen Vorteil. :shock:
Gruß, Frank
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: PBLexerGen + PBParserGen

Beitrag von DrShrek »

Gibt ja schon Lex und Yacc.
Was ist also an Deinen Lexer/Parser besser?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: PBLexerGen + PBParserGen

Beitrag von NicTheQuick »

DrShrek hat geschrieben:Gibt ja schon Lex und Yacc.
Was ist also an Deinen Lexer/Parser besser?
Er erstellt PB-Code?
Bild
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: PBLexerGen + PBParserGen

Beitrag von CSHW89 »

NicTheQuick hat geschrieben:
DrShrek hat geschrieben:Gibt ja schon Lex und Yacc.
Was ist also an Deinen Lexer/Parser besser?
Er erstellt PB-Code?
Jo Richtig. Im Grunde ist es ja Lex und Yacc für PB, auch was weitestgehend die Syntax angeht.
lg Kevin

PS:
Frabbing hat geschrieben:Ich leider auch. Sehe da irgendwie keinen Vorteil. :shock:
Naja am Anfang vielleicht nicht, aber je mehr man damit arbeitet, umso mehr liebt man es :mrgreen:
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: PBLexerGen + PBParserGen

Beitrag von Blackskyliner »

Mhm lecker... Theoretische Informatik :)

Aber cooles Teil, da kann man wenigstens in den Übungs und Vorlesungsbeispielen auch mal auf PB zurück greifen statt bison zu bemühen.

:allright:
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: PBLexerGen + PBParserGen

Beitrag von CSHW89 »

Cool danke für den Zuspruch ;)

Ich benutze es sogar schon in einem zweiten größeren Projekt, ein eigener OOP-PreCompiler. Funktioniert echt super, außer die Laufzeit des Generierens (nicht des Parsens!) ist noch etwas schlecht. Aber daran arbeite ich gerade.

lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: PBLexerGen + PBParserGen

Beitrag von cxAlex »

Sieht extrem interessant aus, wenn ich es schaffe es so zu parametrieren wie ich es mir vorstelle könnte es mir viel Arbeit beim erstellen meines Cross - Compilers abnehmen: http://purebasic.fr/german/viewtopic.php?f=11&t=26382

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: PBLexerGen + PBParserGen

Beitrag von CSHW89 »

Erstmal zum Verständnis: Wie soll denn dein Cross - Compiler arbeiten? So wie ich das verstehe, soll man doch die Möglichkeit haben, seine eigene Scriptsprache zu entwickeln, seine eigene Syntax ect... Aber was für ein Compiler willst du dann bauen? Du kennst ja die Syntax nicht. Also wie soll die Syntax vom Scriptsprachen-Ersteller übermittelt werden?

Zu meinem Programm: Die Generatoren sollten eigentlich nur vom Compilerschreiber benutzt werden. Also in deinem Fall von dir. Den fertigen Compiler benutzen dann halt die Benutzer. In deinem Fall also die Scriptsprachen-Ersteller, was aber nicht so Sinn macht, da sie ja ein Compiler speziell für ihre Scriptsprache brauchen.

Vielleicht verstehe ich da auch was Grundlegendes falsch.

lg Kevin

PS: Ich hab übrigens ne neue Version hochgeladen. Ist zwar schon etwas älter, hatte ich aber damals nicht mehr hochgeladen gehabt. Der Parser-Generator läuft erheblich schneller. Ich glaube bei komplexen Grammatiken war ein Zuwachs von 2000% (!) zu beobachten.
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Antworten