webForumDet fria alternativet

Testa min parser och programmeringsspråk

9 svar · 900 visningar · startad av Sang-drax

Sang-draxMedlem sedan juli 2002581 inlägg
#1

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...)

sgtpepperMedlem sedan apr. 20007 588 inlägg
#2

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 :).

Sang-draxMedlem sedan juli 2002581 inlägg
#3

Hmm, det där "C++ Exception" kommer inte upp på min dator.
Får ta och fixa det.

Sang-draxMedlem sedan juli 2002581 inlägg
#4

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
#5

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

Sang-draxMedlem sedan juli 2002581 inlägg
#6

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

Sang-draxMedlem sedan juli 2002581 inlägg
#7

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.

trexter.comMedlem sedan apr. 20021 203 inlägg
#8

Hur har du programmerat detta språker? I C++ ?

ViktorMedlem sedan aug. 20021 752 inlägg
#9

trexter.com skrev:

Hur har du programmerat detta språker? I C++ ?

Taget från sidan

Compiler written in C++

/Viktor

Sang-draxMedlem sedan juli 2002581 inlägg
#10

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

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)