Aktuelle Zeit: 22.11.2019 17:45

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: PBLexerGen + PBParserGen
BeitragVerfasst: 18.03.2012 21:37 
Offline
Benutzeravatar

Registriert: 14.12.2008 12:22
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:
%%
<<EOF>>  { ProcedureReturn §<EOF> }
[ \t]    { } ; ignore char
[0-9]+   { ProcedureReturn §NUMBER }
[+\-*/]  { ProcedureReturn Asc(yytext) } ; operators
.        { yyerror("Invalid char: "+yytext) }
%%


Parser.pb:
Code:
%token NUMBER
%left '+' '-'
%left '*' '/'

%type eval exp
%start eval

%%

exp: ;[
  NUMBER
  | exp '+' exp
  | exp '-' exp
  | exp '*' exp
  | exp '/' exp
;]
eval: exp
%%


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

_________________
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


Zuletzt geändert von CSHW89 am 07.04.2012 15:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 18.03.2012 22:08 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright:
Aber für sowas bin ich zu dumm :wink:

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 19.03.2012 20:51 
Offline
Benutzeravatar

Registriert: 15.02.2007 21:31
Ich leider auch. Sehe da irgendwie keinen Vorteil. :shock:

_________________
Gruß, Frank


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 19.03.2012 21:26 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:59
Gibt ja schon Lex und Yacc.
Was ist also an Deinen Lexer/Parser besser?

_________________
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 19.03.2012 21:47 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
DrShrek hat geschrieben:
Gibt ja schon Lex und Yacc.
Was ist also an Deinen Lexer/Parser besser?

Er erstellt PB-Code?

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 19.03.2012 23:42 
Offline
Benutzeravatar

Registriert: 14.12.2008 12:22
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 14.06.2012 00:15 
Offline
Benutzeravatar

Registriert: 28.07.2005 00:54
Wohnort: /home/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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 14.06.2012 00:37 
Offline
Benutzeravatar

Registriert: 14.12.2008 12:22
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 10.02.2013 19:28 
Offline
Benutzeravatar

Registriert: 26.06.2008 10:42
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: 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PBLexerGen + PBParserGen
BeitragVerfasst: 11.02.2013 15:02 
Offline
Benutzeravatar

Registriert: 14.12.2008 12:22
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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye