xscDevBlog – LastSharp & Co.

Der xscheme-DevelopmentBlog

Wie entwickle ich meine eigene Scriptsprache? (Teil 3: Syntax)

keine Kommentare

Nun, wie weit sind wir bisher? Wir haben einen Lexer, der unsere Eingabe in Einzelteile spaltet, und wir können einfache Ausdrücke in eine verwertbare Form bringen. Was wir bisher noch nicht (bewusst) gemacht haben, ist, einen Ausdruck zu analysieren und zu prüfen, ob er sinnvoll ist oder nur unzusammenhängend aneinandergereihte Token enthält.

Zur Erinnerung: sowohl “1+2+3″ als auch “1+(” wären Zeichenfolgen, die der Lexer akzeptieren und ohne zu meckern zerkleinern würde. Das ist auch in Ordnung so, da die syntaktische Prüfung ohnehin eher Aufgabe des Parsers ist. Aber was genau gilt es denn dabei zu beachten?

“Syntaxfragen”

  • Sind genau so viele öffnende wie schließende Klammern vorhanden und passen diese zusammen?
  • Stimmt die Zahl der Parameter, mit der eine Funktion aufgerufen wird?
  • Stimmen die Parametertypen, mit denen eine Funktion aufgerufen wird? (“+” arbeitet normalerweise nur auf Zahlen, der Punkt z.B. in PHP auf Strings, etc…)
  • Befinden sich Operatoren an den richtigen Positionen? (Die Fakultät einer Zahl wird z.B. durch Anhängen eines Ausrufezeichens gekennzeichnet: “3!”)
  • Darf eine Funktion geschachtelt vorkommen? (z.B. wäre “echo(echo(1))” eher sinnlos, wenn “echo” die Ausgabefunktion ist)
  • Darf eine Funktion/ein Konstrukt in einer untergeordneten Umgebung vorkommen? (Das wäre z.B. der Fall, wenn man Funktionsdefinitionen innerhalb von Funktionsdefinitionen zulässt.)

Neben der Syntax gibt es noch weitere Punkte, die eine Programmier-/Scriptsprache ausmachen. Eine Auflistung findet man z.B. hier.

Den Rest dieses Beitrags lesen »

Autor: WordPress

August 30th, 2009 at 1:26 pm

Wie entwickle ich meine eigene Scriptsprache? (Teil 2: Grundlagen des Parsens)

1 Kommentar

Einen wichtigen Schritt haben wir an dieser Stelle bereits hinter uns: Der hier beschriebene Lexer verwandelt eine Eingabesequenz wie “1+3*(4-2)”  in eine Liste von Tokens mit Typ und Wert:

zahl        :    1
operator    :    +
zahl        :    3
operator    :    *
open        :    (
zahl        :    4
operator    :    -
zahl        :    2
close       :    )

Damit haben wir eine maschinenlesbare Repräsentation des gewünschten Ausdrucks – allerdings keine Garantie dafür, dass dieser syntaktisch korrekt ist. Ebensowenig kann eine Maschine, die diese Liste nun vorgelegt bekommt, “einfach mal so” den Wert des Ausdrucks berechnen, da ihr Informationen zur Auswertungsreihenfolge fehlen. (Wenn 1+3 zuerst berechnet wird, lautet das Ergebnis 8, wenn 3*(4-2) zuerst berechnet wird, lautet es 7.)

Wir brauchen also eine Darstellung unseres Ausdrucks, die bezüglich der Reihenfolge der Auswertung eindeutig ist und eine Maschine, die diese erstellt  – und wie könnte es anders sein: auch dieses Problem wurde bereits einmal gelöst.

Wandeln wir also auf den Spuren von Edsger W. Dijkstra.

Den Rest dieses Beitrags lesen »

Autor: WordPress

August 15th, 2009 at 3:51 pm

Wie entwickle ich meine eigene Scriptsprache? (Teil 1: Der Lexer)

3 Kommentare

Die Aufgabe, die ich mir hier gestellt habe, eine eigene Script- oder Programmiersprache zu entwickeln, bringt so ihre Probleme mit sich. Wie und wo fange ich an? Ist das nicht zu viel für mich? Und sollte ich nicht auf bereits vorhandene Bibliotheken zurückgreifen, anstatt alles von Grund auf neu zu entwickeln?

Vor allem die letzte Frage kann einem zu schaffen machen. Warum etwas möglicherweise nicht gut funktionierendes entwickeln, wenn es doch überall schon tausendfach durchdachte Lösungen gibt? Immerhin lautet doch eine der obersten Regeln in der Softwareentwicklung:

Don’t reinvent the wheel!

Nun, ich bin Informatikstudent. Ich will wissen, wie die Dinge “unter der Haube” aussehen, ich will lernen. Und wenn alle nur noch auf vorgefertige Bibliotheken zurückgreifen, weiß doch bald keiner mehr, was dem Zauber eigentlich zugrunde liegt… Dementsprechend:

Don’t reinvent the wheel, unless you plan on learning more about wheels!

Diese Anleitung soll jedem helfen, der interessiert daran ist, was im Inneren eines Interpreters oder Compilers eigentlich (ungefähr so) abläuft. Ich selbst habe gerade erst das zweite Semester hinter mir, d.h. allzu theoretisch wird es hier nicht und jeder mit ein wenig logischem Denken und genug Engagement sollte es hinbekommen, meinen Ausführungen zu folgen.

Lasset uns beginnen. ;)

Den Rest dieses Beitrags lesen »

Autor: WordPress

August 11th, 2009 at 8:55 pm

[Release] LastSharp 0.4.4

16 Kommentare

lastsharp044Nach den Änderungen bei Last.FM und den zwei Beta-Versionen der letzten 15 Tage kommt nun wieder eine offizielle Version von LastSharp.

Es gab einige Anfragen und Wünsche, von denen jedoch einige noch weitere Überlegungen benötigen, weshalb sie noch nicht realisiert wurden. Das passiert dann in der nächsten Version. Oder der übernächsten. ;)

Neu in LastSharp 0.4.4 ist:

  • Last.FM-Abonnenten können das neue Radio-API verwenden.
  • Die Parameter, mit denen mp3Gain die heruntergeladenen Dateien normalisiert, sind im Einstellungsdialog modifizierbar.
  • Der Name der Cover-Dateien ist  nun veränderbar.
  • Überlange Titel (tritt vor allem bei klassischer Musik auf) werden nun über eine dreistellige Zeichenfolge am Anfang des Dateinamens eindeutig identifizierbar gemacht.
  • Der komplexe Filter unterstützt über das Präfix “t:” nun auch die Filterung nach Titel.

Hinzu kommen einige Bugfixes, sowie die Unabhängigkeit von LastFmLib.Net, die v.a. Platz spart. An dieser Stelle sei nochmals meine eigene, im Moment im Bau befindliche .NET-Schnittstelle für das Last.FM-API erwähnt, die sich an alle richten wird, die “einfach mal schnell” Anfragen an das API schicken wollen und das ganze Drumherum von LastFmLib.Net nicht benötigen.

Dann habe ich mir noch etwas vorgenommen: Wenn es das nächste Mal eine Änderung bei Last.Fm gibt, werde ich sofort eine neue Version rausbringen und nicht erst warten, bis ich genug zusammengetragen habe, um die Versionsnummer zu rechtfertigen…

Viel Spaß mit LastSharp!

Download (Sourceforge): https://sourceforge.net/projects/lastsharp/files/lastsharp/LastSharp%200.4.4/

Autor:

August 9th, 2009 at 3:39 am

LastSharp feiert Geburtstag!

10 Kommentare

Heute, am 8. August 2009 feiert LastSharp seinen ersten Geburtstag! Ich gebe zu, ich habe nicht gedacht, dass das Programm es so lange mitmacht (immerhin schweben da doch einige rechtliche Fragen im Raum…), aber ich freue mich natürlich trotzdem!

Anbei eine kleine (nicht ganz vollständige) Gallerie zur optischen Entwicklung des Programms!

Den Rest dieses Beitrags lesen »

Autor:

August 8th, 2009 at 7:32 pm

Kategorien: LastSharp

[Beta] LastSharp 0.4.4 Beta 2

19 Kommentare

Wie angekündigt, die zweite Beta-Version von LastSharp 0.4.4. Oberflächlich gesehen gibt es wieder keine großen Änderungen, aber unter der Haube hat sich dennoch was getan:

  • “Meine Playlist (direkt)” sollte nun wieder funktionieren,
  • als Abonnent kann man nun das Radio-API von Last.FM verwenden (“Erweiterte Einstellungen” >> “Verschiedenes” >> “Radio-API” aktivieren, dann LastSharp neu starten),
  • und das Programm ist nun unabhängig von LastFmLib.Net (spart Platz)

Ich denke, ich werde den Release dieser Version noch Ende dieser/Anfang nächster Woche anstreben und größere (nicht so dringende) Änderungen aufs nächste Mal verschieben. Grundlegende Funktionalität geht eben vor.

Sollte jemand Fehler finden, bitte unbedingt mitteilen!

Download: http://dev.xscheme.de/wp-content/uploads/2009/08/LastSharp044Beta2.rar

Den Rest dieses Beitrags lesen »

Autor:

August 3rd, 2009 at 2:06 pm

Kategorien: LastSharp

[Release] LeSharp 1.2.1

3 Kommentare

Ein kleines Problem bei der Erkennung anhörbarer Titel (eng verknüpft übrigens mit dem “Playlist could not be retrieved via API”-Fehler in LastSharp), hat dazu geführt, dass man Lea nicht mehr verwenden konnte.

Diese neue Version passt Lea an die Veränderungen des Last.FM-APIs an. (Die Lösung ist nicht perfekt, und somit werde ich den nächsten größeren Versionssprung mit dem Hauptthema “Stabilität” verknüpfen… EIn bemerkbares Problem wird es dennoch erst geben, wenn Last.FM wieder etwas ändert…)

Download (Sourceforge): http://sourceforge.net/projects/lastsharp/files/lesharp/LeSharp%201.2.1/LeSharp1.2.1.zip/download

Autor:

Juli 31st, 2009 at 6:18 pm

Kategorien: LeSharp / Lea

Wie entwickle ich meine eigene Scriptsprache? Ein Abenteuer in Teilen.

6 Kommentare

In diesem Artikel, dem ersten von vielen, geht es um die Entwicklung einer eigenen Script- oder Programmiersprache. Das sei nur für die erwähnt, die sich Angesichts des Vorgeplänkels der nächsten zwei Absätze fragen: “Was wird das denn jetzt?und dann wieder verschwinden wollen…

Vorspiel

Neben LastSharp und LeSharp, den beiden Tools, die für eine breite Masse gedacht und deshalb auch zumindest ein bisschen nützlich sind, arbeite ich noch an zwei eher theoretischen Projekten: UVD (das im Moment ruht) und Lapicon (Loose API Connection Language).

Letzteres ist eine Scriptsprache zum Senden und Verarbeiten von REST-Requests, also zum Verwenden verschiedenster APIs, z.b. dem von Last.FM. Kein großer Leckerbissen für den Otto-Normal-Benutzer also und auch für Entwickler, die sich mit dem Thema beschäftigen, ist die Sprache nicht der Inbegriff von Eleganz. Deshalb mein Entschluss: Lapicon muss von Grund auf neu entwickelt werden. Das bedeutet: neue Funktionen, mehr Komfort, bessere Performance, usw… Alles in allem keine triviale Aufgabe.

Und dann kam mir die Idee, meinen Versuch zu protokollieren und somit allen, die daran interessiert sind, eine eigene Programmier- oder Scriptsprache zu entwickeln, ein Stückchen weiterzuhelfen. Eine kleine Reise, ein kleines Abenteuer also.
Den Rest dieses Beitrags lesen »

Autor: xsc

Juli 28th, 2009 at 8:19 pm

[Beta] LastSharp 0.4.4 Beta 1

33 Kommentare

Aufgrund der anhaltenden Anfragen, wie man den Fehler mit dem Remoteserver-Verbindungsabbruch beseitigt (Die Lösung steht inzwischen in den Kommentaren zu fast jedem Artikel über LastSharp…), habe ich schnell diese Beta-Version zusammengeschustert, die jetzt getestet werden kann. Der Download sollte nun auch funktionieren, wenn die Option “Modifizierte Verbindung” unter “Erweiterte Einstellungen” >> “Verschiedenes” deaktiviert ist. (Ja, das war die oben angesprochene Lösung…)

Den Rest dieses Beitrags lesen »

Autor:

Juli 14th, 2009 at 3:07 pm

Kategorien: LastSharp

[Release] LeSharp 1.2

2 Kommentare

Eigentlich hatte ich ja andauernd behauptet, ich würde (wegen Uni & Co) nicht dazu kommen, an meinen bisherigen Programmen weiterzuarbeiten, aber heute habe ich’s dann doch zu was gebracht: einer neuen Version von LeSharp nämlich!

Neben einigen Bugfixes enthält diese Version hauptsächlich minimale Änderungen in LD3. Man kann Dateien nun per Drag&Drop ins Programm ziehen und sogar ganze Ordner ablegen, die anschließend rekursiv hinzugefügt werden. Des weiteren gibt es nun die Möglichkeit, STRG+A zu verwenden, um alle Dateien zu markieren, sowie ENTF, um eine oder mehrere Dateien zu löschen.

Oh, ganz wichtig: Lea speichert nun die Session eines Users, d.h. man muss nicht mehr bei jeder Benutzung auf “Browser öffnen” klicken, sondern nur noch dann, wenn die Session abgelaufen ist!

Den Rest dieses Beitrags lesen »

Autor:

Juli 12th, 2009 at 9:39 pm