PsC reloaded

Kommentare anzeigen Worklog abonnieren

Worklogs PsC reloaded

soo still? nein nein das täuscht..

Sonntag, 3. Mai 2009 von da_poller
die letzten tage wars augenscheinlich sehr still um psc was aber nur bedingt stimmt..

nun ich hab nicht sehr viel gemacht aber war nicht faul.
der len,instr ,replace, chr, asc und const befehl wurde eingebaut..

werde vermutlich den anfang der woche mit verbringen den compiler nochmal etwas umzustellen, was aber nur für meine erleichterung dient..

ich habe mich am freitag schon etwas mit writefile,writeline und closefile auseinandergesetzt jedoch bin ich dort noch zu keinem festern ergebniss gekommen. wobei datein wohl mein nächstes thema sein werden.

Befehle über Befehle

Dienstag, 28. April 2009 von da_poller
Heute fand ich endlich die lust alle befehle mal nieder zu schreiben und etwas zu sortieren.
sound und netzwerk befehle sind noch nicht aufgefüht werde ich morgen aber nach editieren.

Bereits eingebaut
Als nächstes geplant
Noch nicht begonnen


hier mal alle befehle aufgelistet:
Zitat:

PsC.Entscheidungen
If, Else, ElseIf, EndIf
Select, Case, Default, EndSelect


PsC.Schleifen
While, Wend
For, Next
Repeat, Until


PsC.Zeit/Zufall
CreateTimer, FreeTimer, Waittimer
CurrentDate,CurrentTime
Delay, Millisec
Rand, Rnd


PsC.String
Asc, Chr, Instr, Left
Len, Lower, Mid, Replace
Right, Trim, Upper


PsC.Eingabe
FlushMouse, GetMouse, MouseHit
MouseX, MouseY, MouseXSpeed, MouseYSpeed
MouseZ, MouseZSpeed, SetMouse
FlushKey, GetKey
KeyDown, KeyHit,
WaitKey

PsC.Dateien
ChangeDir, CloseDir, CloseFile, CopyFile
CreateDir, CurrentDir, DeleteDir, Eof
DeleteFile, ExecFile, FileSize, FileType
OpenFile, FilePos, MoreFiles, NextFile
CountBytes, ReadDir, Seekfile
WriteByte, ReadByte, WriteFile, ReadFile
WriteFloat, ReadFloat, WriteInt, ReadInt
WriteString, ReadString


PsC.OOP
After, Before, Delete, Each, EndType
Field, List, First, Handle, Insert
Last, New, Null, Object, Type


PsC.Grafik
BackBuffer, Cls, Color, Flip, Line, Oval
Rect, SetBuffer, Plot, LoadFont,
Print
SetFont, Text, DrawBlock, DrawBlockRect
DrawImage, DrawImageRect, FreeImage
HandleImage, MidHandle, ImageHeight
ImageWidth, LoadImage, MaskImage, RectsOverlap
ImageRectCollide, ImageRectOverlap
ImageCollide, ImageOverlap


PsC.Sonstiges
Const, AppTitle, End, Break
Func, EndFunc, Return
Int, String, Float, Bool
True, False



soo wie ihr alle seht viele befehle...

ich werde versuchen diesen thread regelmäßig nach zu editieren das erkennbar bleibt wie weit psc nun im moment ist.

vorschläge zu den befehlen, lob kritik usw.. bitte als kommentar.

compiler V1 am laufen

Sonntag, 26. April 2009 von da_poller
sooo das we ist rum und der compiler tut nun auch was er soll.. folgende programme z.b. werden fehlerfrei übersetzt und funktionieren ohne probleme:

#1Code: [AUSKLAPPEN]

Int zahl=4
Int zahll=6
Int ergebnis

Float zahlll=3.14

String jaja="hallowelt"
bool test=0


print left(jaja,1)
print left(jaja,3)
print right(jaja,1)
print right(jaja,3)
print mid(jaja,3,3)
print mid(jaja,5,2)


Int c
While c<10
   c++
   
   If c>5
      Print "groß"
   ElseIf c==0
      Print "nulll"
   Else
      Print "irgendwas"
   EndIf
   
   select c
   Case 3
      Print "c 3"
      Break
   Case 9
      Print "c9"
      break
   Default
      Print "c nix"
      
   endselect
   
Wend


For(int y,0,4)
   For(int x,0,4)
      print x+y
   Next
Next

Int f
int a
Repeat
   f++
   
   a=myfuncc(f,2)
   Print a
   
Until f<10


End

int func myfunc(int f,int ff,int fff=3)

Return (f+ff)-fff

endfunc


int func myfuncc(int f,int ff)

Return f*ff

endfunc

int func myfunccc(int fff=3)

Return fff

endfunc



#2Code: [AUSKLAPPEN]

int b=4
int c=2

print mal(2,4)


waitkey

End

int func mal(int lh,int rh)

return lh*rh

endfunc


#3Code: [AUSKLAPPEN]

int b=4
int c=2
string lol=" welt"

print mal(2,4)
print "hallo"+lol

waitkey

End

int func mal(int lh,int rh)

return lh*rh

endfunc


und die compile zeiten dafür liegen:
#1:243ms
#2:39ms
#3:47ms

nunja für diese kurzen programme eventuell nicht grad die rekord zeiten aber hab auch noch keinerlei gedanken an die optimierung verschwendet.. bin ja shcon froh das der source einigermaßen gut auskommentiert ist..

als zwischencode verwende ich nun c++(wobei ich meißt prozedural arbeite und oop nur im notfall verwende..) später wird sich das evtl noch ändern.. der compiler ist im moment so aufgebaut das sich psc funktionen sehr leich verändern lassen..

sooo die nächsten tage werd ich mich dran machen eine keyword liste zu schreiben und diese auch möglichst vollständig in psc zu integrieren..

fragen kritik lob usw wie immer gerne gesehen als kommentar(über beispielprogramme in psc freu ich mich natürlich auch somit kann ich den compiler gleich mal testen)

so viel zu heute.. naja screen? muss ned sein oder? alle wissen ja wie die "cmd" aussieht Wink

parser fertig

Freitag, 24. April 2009 von da_poller
soo nach einigen kleinen bugs ist der parser nun fertig..

demnach wird das PsC-programm nun zuerst in tokens zerlegt, anschließend analysiert(alle tokens zuordenbar?.. funktionen... etc.)

nun steht die entscheidung an in WELCHE sprache psc nun als zwischencode kompilieren soll..

einige vorschläge anderer user leuchten mir ein hier kurz eine gegenüberstellung:

c:
vorteil: schnell
nachteil: kein oop

c++:
vorteil: OOP
nachteil: nicht so schnell wie c oder assembler

assembler:
vorteil: extrem schnell
nachteil: sehr lowlvl und daher schwer

nun was ich genau verwenden werde werd ich übers we entscheiden wärend ich eine befehlsliste und einen plan schreibe was im detail nun alles rein kommen soll/muss/könnte...

eure tipps oder vorschläge zur verwendeten "zwischensprache" BITTE per komment oder PM!!

neuer parser

Montag, 20. April 2009 von da_poller
soo hab die letzten tage den neuen parser angefangen und bin zwar noch nicht so weit das ich ein fertiges programm ausgeben kann.. ABER.. der gesammte code wird nun sauber in tokens zerlegt und auf fehler überprüft..


hier ein beispiel(man beachte die leicht veränderte syntax)
Code: [AUSKLAPPEN]
Int zahl=4
Int zahll=6
Int ergebnis

Float zahlll=3.14

String jaja="hallowelt"
bool test=0


print left(jaja,1)
print left(jaja,3)
print right(jaja,1)
print right(jaja,3)
print mid(jaja,3,3)
print mid(jaja,5,2)


Int c
While c<10
   c++
   
   If c>5
      Print "groß"
   ElseIf c==0
      Print "nulll"
   Else
      Print "irgendwas"
   EndIf
   
   select c
   Case 3
      Print "c 3"
      Break
   Case 9
      Print "c9"
      break
   Default
      Print "c nix"
      
   endselect
   
Wend


For(int y,0,4)
   For(int x,0,4)
      print x+y
   Next
Next

Int f
int a
Repeat
   f++
   
   a=myfuncc(f,2)
   Print a
   
Until f<10


End

int func myfunc(int f,int ff,int fff=3)

Return (f+ff)-fff

endfunc


int func myfuncc(int f,int ff)

Return f*ff

endfunc

int func myfuncc(int fff=3)

Return fff

endfunc


wird in:
Code: [AUSKLAPPEN]
Befehl  ::int
Variable::zahl
Operator::=
Zahl    ::4
NONE::NEWLINE!!!
Befehl  ::int
Variable::zahll
Operator::=
Zahl    ::6
NONE::NEWLINE!!!
Befehl  ::int
Variable::ergebnis
NONE::NEWLINE!!!
Befehl  ::float
Variable::zahlll
Operator::=
Zahl    ::3.14
NONE::NEWLINE!!!
Befehl  ::string
Variable::jaja
Operator::=
Operator::"
String  ::hallowelt
Operator::"
NONE::NEWLINE!!!
Befehl  ::bool
Variable::test
Operator::=
Zahl    ::0
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::left
Operator::(
Variable::jaja
Operator::,
Zahl    ::1
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::left
Operator::(
Variable::jaja
Operator::,
Zahl    ::3
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::right
Operator::(
Variable::jaja
Operator::,
Zahl    ::1
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::right
Operator::(
Variable::jaja
Operator::,
Zahl    ::3
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::mid
Operator::(
Variable::jaja
Operator::,
Zahl    ::3
Operator::,
Zahl    ::3
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Befehl  ::mid
Operator::(
Variable::jaja
Operator::,
Zahl    ::5
Operator::,
Zahl    ::2
Operator::)
NONE::NEWLINE!!!
Befehl  ::int
Variable::c
NONE::NEWLINE!!!
Befehl  ::while
Variable::c
Operator::<
Zahl    ::10
NONE::NEWLINE!!!
Variable::c
Operator::+
Operator::+
NONE::NEWLINE!!!
Befehl  ::if
Variable::c
Operator::>
Zahl    ::5
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
String  ::groß
Operator::"
NONE::NEWLINE!!!
Befehl  ::else
Befehl  ::if
Variable::c
Operator::=
Operator::=
Zahl    ::0
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
String  ::nulll
Operator::"
NONE::NEWLINE!!!
Befehl  ::else
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
String  ::irgendwas
Operator::"
NONE::NEWLINE!!!
Befehl  ::end
Befehl  ::if
NONE::NEWLINE!!!
Befehl  ::select
Variable::c
NONE::NEWLINE!!!
Befehl  ::case
Zahl    ::3
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
Zahl    ::3
Operator::"
NONE::NEWLINE!!!
Befehl  ::break
NONE::NEWLINE!!!
Befehl  ::case
Zahl    ::9
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
Zahl    ::9
Operator::"
NONE::NEWLINE!!!
Befehl  ::break
NONE::NEWLINE!!!
Befehl  ::default
NONE::NEWLINE!!!
Befehl  ::print
NOT detected::
Operator::"
String  ::c nix
Operator::"
NONE::NEWLINE!!!
Befehl  ::end
Befehl  ::select
NONE::NEWLINE!!!
Befehl  ::wend
NONE::NEWLINE!!!
Befehl  ::for
Operator::(
Befehl  ::int
Variable::y
Operator::,
Zahl    ::0
Operator::,
Zahl    ::4
Operator::)
NONE::NEWLINE!!!
Befehl  ::for
Operator::(
Befehl  ::int
Variable::x
Operator::,
Zahl    ::0
Operator::,
Zahl    ::4
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Variable::x
Operator::+
Variable::y
NONE::NEWLINE!!!
Befehl  ::next
NONE::NEWLINE!!!
Befehl  ::next
NONE::NEWLINE!!!
Befehl  ::int
Variable::f
NONE::NEWLINE!!!
Befehl  ::int
Variable::a
NONE::NEWLINE!!!
Befehl  ::repeat
NONE::NEWLINE!!!
Variable::f
Operator::+
Operator::+
NONE::NEWLINE!!!
Variable::a
Operator::=
Funktion::myfuncc
Operator::(
Variable::f
Operator::,
Zahl    ::2
Operator::)
NONE::NEWLINE!!!
Befehl  ::print
Variable::a
NONE::NEWLINE!!!
Befehl  ::until
Variable::f
Operator::<
Zahl    ::10
NONE::NEWLINE!!!
Befehl  ::end
NONE::NEWLINE!!!
Befehl  ::int
Befehl  ::func
Function::myfunc
Operator::(
Befehl  ::int
Variable::f
Operator::,
Befehl  ::int
Variable::ff
Operator::,
Befehl  ::int
Variable::fff
Operator::=
Zahl    ::3
Operator::)
NONE::NEWLINE!!!
Befehl  ::return
NOT detected::
Operator::(
Variable::f
Operator::+
Variable::ff
Operator::)
Operator::-
Variable::fff
NONE::NEWLINE!!!
Befehl  ::end
Befehl  ::func
NONE::NEWLINE!!!
Befehl  ::int
Befehl  ::func
Function::myfuncc
Operator::(
Befehl  ::int
Variable::f
Operator::,
Befehl  ::int
Variable::ff
Operator::)
NONE::NEWLINE!!!
Befehl  ::return
Variable::f
Operator::*
Variable::ff
NONE::NEWLINE!!!
Befehl  ::end
Befehl  ::func
NONE::NEWLINE!!!
Befehl  ::int
Befehl  ::func
Function::myfuncc
Operator::(
Befehl  ::int
Variable::fff
Operator::=
Zahl    ::3
Operator::)
NONE::NEWLINE!!!
Befehl  ::return
Variable::fff
NONE::NEWLINE!!!
Befehl  ::end
Befehl  ::func
NONE::NEWLINE!!!


wie zu finden ist bei der ausgabe von strings noch ein kleines problem(print " ") wie es bei variablen aussieht mussi hc ncoh sehen jedoch bin ich recht zufrieden mit dem aktuellen ergebniss..

mitlerweile stehen 3 sprachen als zwischencode vor DER EXE zur debatte:
c++
c
assembler

wobei assembler zu 90% schon vor dem recall ausscheidet..
was ich alles mit c so anstellen kann muss ich erst noch rausfinden
dazu aber dann mehr wenn ich mir selber sicher bin Wink

soviel zum aktuellen fortschritt..


an dieser stelle einen dank an coolo der mir be den anfängen des token-generators sehr geholfen hat!

Left Mid Right

Donnerstag, 16. April 2009 von da_poller
soo heute haben es die 3 string befehle "left", "mid" und "right" in psc geschafft:

left(string$,anzahl)
mid(string$,start,anzahl)
right(string$,anzahl)

die c++ funktionen dazu werden natürlich nur eingebungen sofern sie auch wirklich benötigt werden..

morgen werd ich mir sofern zeit ist(das wetter nicht schön ist) mir folgende befehle vornehmen:
Arrow Trim
Arrow lower
Arrow upper
Arrow instr
Arrow replace

vornehmen

und aus einer spontanen entscheidung die arbeitsweise des parsers neu überdenken(tipps dazu gerne per comment oder wenn länger PN) (bitte keine einzelnen schlagwörter..)

so das wars du dem bischen das ich heute geschafft habe...

an dieser stelle ein dank an fredko(c++ hilfen)

*.PsC -> *.cpp -> *.exe.

Montag, 13. April 2009 von da_poller
soo der weg von *.psc nach *.exe ist komplett

zwar noch nicht vollkommen automatisch aber nahezu.

folgendes programm wird z.b. fehlerfrei übersetzt(enthält nebendran auch alle bisher möglichen befehle)
Code: [AUSKLAPPEN]
Int zahl=4
Int zahl2=6
Int ergebnis

Float zahl3=3.14

String jaja="hallowelt"
bool test=0


Int c
While c<10
   c++
   
   If c>5
      Print "groß"
   ElseIf c==0
      Print "nulll"
   Else
      Print "irgendwas"
   EndIf
   
   select c
   Case 3
      Print "c 3"
      Break
   Case 9
      Print "c9"
      break
   Default
      Print "c nix"
      
   endselect
   
Wend


For(y,0,4)
   For(x,0,4)
      print x+y
   Next
Next

Int f,a
Repeat
   f++
   
   a=myfunc2(f,2)
   Print a
   
Until f<10
waitkey
End


func myfunc1%(f1%,f2%,f3%=3)
   Return (f1+f2)-f3
endfunc

func myfunc2%(f1%,f2%)
   Return f1*f2
endfunc

func myfunc3%(f3%=3)
   Return f3*2
endfunc


nun das ergebnis das man sieht ist keines denn ein waitkey() gibt es NOCH nicht.

für die grafikausgabe hab ich mir gedacht nutze ich später die SDL lib. eine sammlung schöner grafikfunktionen und auch der möglichkeit eines 3D modus unter openGL.. aber dazu will ich zuerst die grundbefehle fertig machen und OOP zum größten teil einbauen.

zur oop syntax hab ich mir noch keine gedanken gemacht, weil ich dazu eventuell ein paar meinungen von euch hören will wie es denn am schönsten für EUCH zu verwenden ist..

nun wenig geschrieben viel hat sich getan..

wie immer: kritik lob und vorschläge sind gerne gesehen!


edit: waitkey wurde nun eingefügt und funktioniert auch. (wie zu sehen verwendet es KEINE klammern, jedoch kann sich an der syntax noch einiges ändern wenn es notwendig ist(wobei ich einfachheit möglichst wahren möchte)

Back 2 Life

Sonntag, 12. April 2009 von da_poller
nachdem PsC "1" leider sehr abrupt einem headcrash zum opfer fiel und ich dummerweise kein backup hatte(kleine schwäche von mir.) wurde es schnell verdammt still um das thema...

jedoch hatte mich die letzten tage wieder die psc idee gepackt und ich habe kurzerhand einige dinge im kopf durchdacht und mir gedanken zur syntax gemacht(die ich euch nicht vorenthalten will:
Code: [AUSKLAPPEN]
;If
;Else
;ElseIf
;EndIf
;
;Int var1=wert
;Float var2=wert
;String var3=wert
;bool var4=True/False


;While bedingung==lol
;Wend

;For(var,start,ende,[Step])
;Next


;print(variable)|print "text"

;array%(dimens,dimens,...)

;End

;func name(para1,para2...)
;Return variable
;endfunc

;Repeat
;Until bedingung==lol



;Select
;Case wert
;Default
;endselect

;in++
;endin++


das meißte sollte sowieso logisch sein eventuell das in++ und endin++ sollten komisch vorkommen.. das ist inline c++ code(warscheinlich nahezu immer unnötig aber evtl doch mal brauchbar)

wie vom vorgänger gewohnt übersetze ich psc files in c++ code der mit dem mingw compiler fertig kompiliert wird.(die idee für pcs "2" mich mit assembler zu beschäftigen hab ich aufgrund mangelnder motivation verworfen.. verzeiht mir Razz )

im allgemeinen will ich eine einfache basic syntax verfolgen womit ähnlichkeiten und überschneidungen mit BB nicht selten sein werden.

die bisherige befehlsreferenz ist warlich nicht der brüller jedoch PLANE ich auch einen 2D grafikmodus auf basis von dx9(10??) oder eventuell openGL fals ich das auch noch hin bekomme werd ich eventuell(sofern ich genug lerne dabei) einen 3D modus versuchen..

OOP soll natürlich im vollen c++ umfang auch vertreten sein(jedoch in basic syntax(sofern es geht)

die größte vereinfachung im gegensatz zu c++ wird aber vermutlich erst mit dem einführen eines grafikmodus existieren.

für alle die den vorgänger nicht kannen oder schon vergessen haben: https://www.blitzforum.de/worklogs/193/

wie gehabt fragen tipps und kritik sind gerne gesehen Wink

soviel für den anfang als erklärung was ich machen will aber nun kurz was schon gibt:
Arrow der Mingw der bei seiner installation ca 60Mb groß ist wurde auf 2.15Mb abgespeckt
Arrow eine einfache kleine ide steht schon(noch kein syntax highlightning)
Arrow ein grund syntax konzept (s.O.) steht schon fest.

soviel jetzt dazu.