Zum Inhalt springen

YiB

Mitglieder
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

  1. Das erste mal zu langsam editiert ^^
  2. Expr_LCmp = Expr_Cmp {("AND" | "OR" | "NOT" | "XOR") Expr_Cmp}. Edit: Verdammt, not ist ja unär ^^ So ists aber richtig oder? Expr_LCmp = ["NOT"] Expr_Cmp {("AND" | "OR" | "XOR") ["NOT"] Expr_Cmp}.
  3. Danke für eure Antworten Type, Ident, String und Integer erkennt schon der Scanner, deshalb brauch ich das im Parser nicht nochmal zu tun "!" ist binäres XOR, die Operatoren und Reihenfolge hab ich erstmal von PureBasic geklaut, das kann ich ja später noch ohne weiteres ändern... Das unäre Minus hab ich vergessen, so sollts sein: Expression = ["-"] Expr_LCmp.
  4. Hi! Nach einem Jahr ausgiebigem trial and error hab ich endlich verstanden wie man einen Parser schreiben kann Ich hab jetzt mal eine Syntax in EBNF definiert, wär nett wenn ihr mal nach Fehlern / Verbesserungsmöglichkeiten gucken könntet... Den Fehler den Parser mit Fehlerhafter EBNF zu schreiben hab ich bei meinem letzten Versuch gemacht ^^ Program = {Statement}. Statement = (Declaration | Assignment | Call | IfSeq | WhileSeq | ForSeq) ";". Declaration = VarDecl | ConstDecl. VarDecl = "VAR" Type Ident. ConstDecl = "CONST" Ident "=" (Integer | String). Assignment = Ident ":=" (Expression | StrExpression). Expression = Expr_LCmp. Expr_LCmp = Expr_Cmp {("AND" | "OR" | "NOT" | "XOR") Expr_Cmp}. Expr_Cmp = Expr_Sum [(">" | ">=" | "<" | "<=" | "==" | "!=") Expr_Sum]. Expr_Sum = Expr_Product {("+" | "-") Expr_Product}. Expr_Product = Expr_Bit1 {("*" | "/") Expr_Bit1}. Expr_Bit1 = Expr_Bit2 {("|" | "&") Expr_Bit2}. Expr_Bit2 = Expr_Factor {("<<" | ">>" | "%" | "!") Expr_Factor}. Expr_Factor = ("(" Expression ")") | Integer | Call | Ident. StrExpression = (String | Call | Ident) {"+" (String | Call | Ident)}. Call = Ident "(" {(Expression | StringExpression)} ")". IfSeq = "IF" Expression Block. WhileSeq = "WHILE" Expression Block. ForSeq = "FOR" Ident ":=" Expression "TO" Expression Block. Block = "{" {Statement} "}".
  5. >In der Kontaktliste werden einige Kontakte als Offline angezeigt obwohl diese Online sind. Du meinst nicht das die den Status "als offline anzeigen" aktiviert haben??
  6. YiB

    Interpreter schreiben

    Danke erstmal für eure Antworten! @Guybrush Threepwood: Der soll so ähnlich wie QBasic werden, nur für Windows... @waterhouse533-lp: Entwurfsmuster sind doch sozusagen beschreibungen, wie die einzelnen Teile des Programms funktionieren oder? Das hab ich schon grob aufgeschrieben... @JesterDay: Variablen definieren und so wird alles vom Interpreter übernommen, da die Sprache möglichst auch für Anfänger sehr leicht zu benutzen sein soll. Für die Variablen dachte ich auch, dass ich ein Record/Structure/Type (und wie auch immer das heißt in den verschiedenen Sprachen ) nehmen werde. So also ich bin inzwischen ein bischen weiter, und er kann immerhin schon einfache Befehle ausführen Der Interpreter übersetzt den Source zuerst in Bytecode, der ungefähr so aussieht: - Id des 1. Befehls - Anzahl der Parameter - Länge des 1. Parameters - 1. Parameter (String) - Länge des 2. Parameters ... -Id des 2. Befehls ... Ich denke Schleifen, If-Abfragen usw- werd ich in Labels umwandeln, die eine eigene ID bekommen. Ich hab alle Funktionen die der Interpreter versteht auch in meinem Programm, und die Poiter dahin in einem Array. Jetzt hat ja jeder Befehl eine ID, und die steht in dem Array im Index. Der Interpreter ließt also die ID ein, dann die Parameter und führt dann die entsprechende Funktion durch den Pointer im Array aus. Die Parameter übergibt er in einem String-Array. Soweit funktionierts auch zuverlässig und relativ schnell Jetzt hab ich mir erstmal gedanken gemacht wie ich die Konstanten machen soll, und da der Code evtl. vor jeder Ausführung neu "kompiliert" werden muss darf das ersetzen der Konstanten durch ihre Werte auch bei 1000 Konstanten nicht viel länger als eine Sekunde dauern. Ich hab schon in einem anderen Forum gefragt wie ich das anstellen soll, und bin so an Hashtabellen gekommen. Gibt es vielleicht auch eine noch schnellere Variante?
  7. Hi Leuts! Ich bin grad dabei einen Interpreter zu schreiben (eigentlich nur ein Teil eines größeren Projekts), und ich würd mal gern wissen wie die Leute vom Fach das tun würden Er sollte mindestens diese Voraussetzungen erfüllen: Befehle sollte man leicht hinzufügen können Natürlich nicht zu lahm Variablen, Konstanten, Arrays, Funktionen etc... If, Case, Schleifen, Booleans evtl. benutzerdefinierte Typen, Prozeduren etc... Tja mehr fällt mir grad nicht ein... Ich hab schon angefangen mit dem Proggen, und werd warscheinlich auch nichts Großartiges mehr an meinem Konzept ändern... Aber für weitere Projekte kanns ja nicht schaden, und außerdem interessieren mich die verschiedenen Lösungswege Ich erwarte jetzt keine komplette ausführliche Lösung oder so, nur grobe Lösungswege... MfG, YiB

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...