Eigene Programmiersprache erstellen: Visual Opal

tappi

Grünschnabel
Hallo,

für alle, die es interessiert: Ich arbeite grade an einer eigenen Programmiersprache. Das klingt zunächst einmal komisch... Wozu denn noch eine Programmiersprache? Nun ... Das stimmt schon aber der Hintergrund sieht etwas anderes aus.

Die von mir erstellte (oder besser gesagt noch in der Entstehung befindliche) Programmiersprache ist sehr BASIC ähnlich. D.h. erlernter Syntax muss nur teilweise bei der Sprache (genannt Visual Opal / VOpal) modifiziert werden. Auch C oder PHP Coder können sich mit der Sprache recht schnell anfreunden (zumindest versuchte ich darauf zu achten).

Im Prinzip besteht der Compiler aus drei Elementen, wobei nur eines dieser Elemente von mir geschrieben wird: Einer Art Converter, einem Assembler (NASM) und einem Linker (ALINK). Wenn man nun einen VOpal Code compilieren will wird dieser von meinem "Compiler" in Assembler Code umgewandelt und dann von den anderen Programmen in das gewünschte Format (EXE, COM, DLL, ...) umgewandelt. Ich könnte natürlich zumindest den Assembler in meinen Compiler integrieren, jedoch will ich später einmal einen Converter haben, der auch noch andere Plattformen ansprechen kann. So wäre es dann möglich mit einem VOpal Code nicht nur Win oder Linx anzusprechen, sondern auch exotische CPUs oder Microcontroller.

Ihr könnt euch ja einfach mal das Programm herunterladen: http://www.fdos.de/vopal

Wenn Ihr den Code wollt müsst Ihr mir bitte eine Mail schreiben (tappertzhofen@fdos.de), da ich den Code nicht als GNU Project veröffentliche.

Ach ich sollte erwähnen, dass das Programm in Visual Basic programmiert wird. Da der Compiler weder speichereffizent sein muss und keine besondere Schnelligkeit vorweisen muss ist das ja egal. Außerdem werden wohl die meisten mit VB umgehen können.
 
Also zumindest deine Dokumentation ist unvollständig.

Wie sieht es aus mit Konvertierungen?

Ist die Sprache Object Orientiert?

Wieso stellst du sie nicht unter GPL?`

Wie behandelst du Fehler wie
a = 3;
a / 0

Bei den Operatoren, gibt es BitOperatoren?

Ich sehe keine Fliesskomma Datentypen, gibt es keine double, float ?

Ebenso sehe ich laut Doku kein Vorrangverhalten mit ( ) in Arythmetischen Berechnungen.

Gibt es ein Exception Handling?

Wie kann ich Echo auf stderr umleiten?

usw
 
Original geschrieben von Christian Fein
Also zumindest deine Dokumentation ist unvollständig.

Die ist sowieso noch nicht fertig. Bzw. noch lange nicht fertig.

Original geschrieben von Christian Fein
Wie sieht es aus mit Konvertierungen?

Konvertierungen werden wie in Basic oder C nicht als eigentlicher Sprachbestandtteil implementiert, sondern durch Funktionen der Header Dateien gesteuert. So gibt es eine Funktion "inttostr" (die übrigends leider nur mal kurz in der Doku erwähnt wird) mit der man halt eine Integer Variable in eine String Variable umwandeln kann.

Original geschrieben von Christian Fein
Ist die Sprache Object Orientiert?

Im Augenblick ist sie als Alpha Version noch nicht Objekt orientiert. Sie soll aber später einmal Object Orientiert sein. Das ist eigentlich kein wirklich großes Problem, da man eben auch mit Assembler objektorientiert programmieren kann.

Original geschrieben von Christian Fein
Wieso stellst du sie nicht unter GPL?

Vielleicht wird sie es nachdem die Sprache aus der Alpha Version raus ist. Ich habe in Assembler ein GPL Betriebssytem geschrieben... weiß jedoch nicht, ob ich immer alles als Open Source deklarieren sollte.

Original geschrieben von Christian Fein
Wie behandelst du Fehler wie
a = 3;
a / 0

a = 3 ist kein Fehler sondern ein Bug meiner Sprache (der aber in der nächsten Alpha schon behoben sein wird). A/0 ruft einen Interrupt auf, den man dann über schreiben muss. Das kann man später noch einbauen. Viel wichtiger ist es aber die Fehlertoleranz meiner Sprache noch richtig zu justieren.

Original geschrieben von Christian Fein
Bei den Operatoren, gibt es BitOperatoren?

Das wird noch eingebaut. Außerdem kann man mit

asm
...
end asm

Inline Assembler Anweisungen schreiben (jetzige Alpha: "endasm" und nicht "end asm").

Original geschrieben von Christian Fein
Ich sehe keine Fliesskomma Datentypen, gibt es keine double, float ?

Double gibt es als 64 Bit Datentyp (jedoch kann man nur eine solche Variable zur Zeit erstellen und noch nicht mit ihr rechnen). Float und Single werden die Flieskomma Datentypen werden. Ich muss jedoch dazu noch etwas mehr über FPU Befehle lernen.

Original geschrieben von Christian Fein
Ebenso sehe ich laut Doku kein Vorrangverhalten mit ( ) in Arythmetischen Berechnungen.

( ) und * bzw / werden noch nicht gesondert behandelt. Ich arbeite im Augenblick an einem internen Vorcompiler, der ( ) und * / in die richtige Reihenfolge setzt.

Original geschrieben von Christian Fein
Gibt es ein Exception Handling?

Wie kann ich Echo auf stderr umleiten?

usw

Wie gesagt... ich bin noch am Anfang. Im prinzip habe ich erst vor gut zwei Wochen angefangen den Compiler zu programmieren. Ich muss noch sehr viel einbauen. Geduldet euch also. Nochwas: VOpal soll kein zweites C++ werden. Dafür würde ich es nicht entwickeln. Es ist schon eher was für VB Programmierer, die gerne eine schnelle und möglichst kompakte Stand Alone EXE Anwendung (oder auch für andere BS) schreiben wollen, dabei aber gleichzeitig nicht auf C++ umsteigen wollen.

Im Prinzip ist mein "Compiler" ja nur ein Converter, der VOpal Code in Assembler umschreibt. Allerdings hat das einen Hintergedanken. Ein besonderes "Feature" von VOpal wird es nämlich sein nicht nur NASM Assembler Syntax zu erstellen, sondern über ASM-Tabellen auch VOpal Code inandere Maschienensprachen zu setzten. So kann man dann mit VOpal Code Intel Assembler programmieren, oder AT&T oder ein Programm für den Mikrocontroller XXXXX oder was auch immer.

Desweiteren ist es halt mein Hobby immer alles selber auszuprobieren: eigenes (kleines mini) Betriebssystem, eigene Programmiersprache etc....
 
Zuletzt bearbeitet:
Tappi kannst du mir sagen wie du es gemachst hast den ich wollte genau das selbe machen ich habe zwar nur eine Demo aber darum brauche ich ein eigenes Programm
 
Zurück