Jag bestämde mig för att prova på att göra en parser.
Det fungerade och jag vidareutvecklade den till ett enkelt programmeringsspråk, kallat Omicron.
Det skulle vara trevligt om någon ville testa parsern och/eller kompilatorn och hitta buggar som säkert finns där.
Dokumentation finns på:
http://www.strandmark.com/omicron.shtml
Språket stödjer:
*Multi-dimensional arrays
*Definition of new operators
*Built-in mathematical operations (derive, eq solver)
*Most C++ operators
* ^ (power) operator
*Run-time user input
En stor nackdel är hastigheten, men man kan ju inte få allt...
Ladda hem
(EDIT: mycket har förändrats...)
Snyggt!
Jag har bara kikat som hastigast på det och jag är imponerad! Jag skall testa mer ingående senare.
En liten grej slog mig, när jag försöker köra program som tar inmatningar i det grafiska gränssnittet så får jag ett fel, "C++ Exception", du borde istället langa upp en dialogruta som förklarar att man måste köra program som tar inmatningar i konsoll-läget, så att man inte blir så förvirrad :).
Hmm, det där "C++ Exception" kommer inte upp på min dator.
Får ta och fixa det.
Uppdatering
Jag har uppdaterat programmet lite.
Förutom att fixa ovanstående bugg, har jag även lagt till rutiner för in- och utmatning till filer.
För er som undrar hur kod kan se ut, kommer här ett exempel.
//
// DERIVE
//
// Made ny Petter Strandmark
//
print "Enter the function you wish to derive: f(x)="
function "func" "x" input
print "For which x do you want to calculate: "
x = input
h = 0.00001
derivate = (func(x+h) - func(x)) / h
print "The derivate is " derivate
Kod för in- och utmatning ser ut så här:
//
// This program demonstrates file i/o
// Made by Petter Strandmark 2002
//
//First, write a file
//set output to file
redirect_output "test.txt"
//write a few lines to the file
print 123.12 "\n"
print "Petter's test \n"
print 12+12 "\n"
print "pi = " p "\n"
//Set output to screen again
//This command also closes the file
redirect_output "default"
//Now, read the lines from the
//file and print them
redirect_input "test.txt"
//Print lines until the file has ended
repeat
print input_str "\n"
until eof
//(eof = end of file)
ToonsterMedlem sedan feb. 20001 590 inlägg Några synpunkter, rent allmänt:
Du har inget radavslutningstecken, typ ; i C/C++. Skulle det inte vara bra, då kan man köra fler instruktioner per rad, och det borde vara lättare att parsa en korrekt avslutad kodrad?
function "func" "x" input
Förstår inte varför deklarationen av "func" och "x" har cituationstecken? förbryllande om tilldelning av variabler och deklaration av variabler (textsträngar) också har det?
Inget allvarligt menat, det är ju ditt "projekt", se det som "undrande konstruktiv kritik" :)
/T
Jag har inget radavslutningstecken för att jag vill hålla spåket på en så enkel nivå som möjligt.
Det skulle vara mkt enkelt att ha ett ; som avgränsare.
//const char LineDelimiter = '\n';
const char LineDelimiter = ';';
Men jag tycker det blir enklast så. Alla riktlinjer för snygg källkod säger att man ska hålla sig till ett statement per rad.
Vad beträffar deklarationen av funktion så fungerar det så här:
*När man ska använda själva funktionen, dvs anropa den, skriver man utan "
*När man refererar till själva namnet, när man t ex deklarerar eller deriverar den, skriver man med "
Samma sak gäller för variabler.
Dock får jag nog hålla med dig, det kan nog kännas lite konstigt :l
Under de månader som gått har mycket hunnit uppdateras och förändras. Tonvis med nya saker har lagts till och förbättrats.
Bland annat så har den fula syntaxen
function "func" "x" input
bytts ut mot
function func(x) = input
Jag läste igenom reglerna som hastigast och hittade ingen regel mot att "bumpa" threads, vilket det jag gör nu får räknas som.
Hur har du programmerat detta språker? I C++ ?
Yup, alla Omicron-kompilatorer är skrivna i C++. Vore kul att få till en skriven i Java, men det tar nog för lång tid och så blir den kanske för slö.
Om det är någon som är duktig på matematik och kan tala om hur man mha typ Newton-Raphsons metod löser ekvationer på formen
f1(x1,x2,...,xn) = 0
f2(x1,x2,...,xn) = 0
...
fn(x1,x2,...,xn) = 0
så vore jag tacksam.
(edit)
NM, jag hittade ett dokument med google som hjälpte mig
http://www.economics.unimelb.edu.au/simulation/newton-raphson1.pdf