Projekt név / Project name
|
MyPascal
|
Rövid leírás / Short description
|
Pascal syntax based, lesser type dependant script language interpreter written in Delphi.
The project's main goal is to create an easy-to-use, native source and DLL based interpreter
for OTKD (= Country Student's Scientific Conference) 2005 and for my thesis in Engineering Informatics
at the Budapest University For Technology and Economics (BME).
Pascal szintaxisra épülő, gyengén típusos szkriptnyelv interpreter Delphiben.
A projekt célja egy jól használható, natív és DLL alapú interpreter megvalósítása,
és a 2005-ös évi Országos TDK-n, valamint a Dimpomatervezéshez való felhasználása.
|
Utolsó frissítés dátuma / Last update
|
2005. Március 29., Kedd, 19:00
|
Verziószám / Version
|
1.6.0.15
|
Letöltés / Downloads
|
MyPascal_160a.zip
|
Dokumentáció / Documentation
|
HTML Dokumentáció (Hungarian)
|
Állapot / Status
|
AKTÍV / ACTIVE
|
Links / Linkek
|
http://karnokd.uw.hu
|
Megjegyzés / Comments
|
Currently the project's language is hungarian (docs, sources). I'm working hard on it to translate them
all to English. I'm sorry for those who can't start using it.
|
Képességek / Features
Telepítés
Leírás
Hírek
2005. Március 29., Kedd, 19:00
|
|
First official release of version 1.6 alpha on Sourceforge.Net
Első hivatalos 1.6 alfa publikáció a Sourceforge.Net-en.
|
2005. Február 28., Hétfő, 23:00
|
|
Verziószámot váltott az interpreter: 1.5;
Jelentős frissítések történtek:
- A DLL számtalan függvénnyel bővült
- Elkészítettem egy C++ header fájlt, ami segíthet a DLL használatában (függvény prototípusok)
- Készítettem egy Visual Basic deklarációt is a DLL függvényeiről, valamint van egy Excel-makró példa
- Elkeztem (át)alakítani a dokumentációt. Mostantól HTML alapú lesz az egész (Sokkal platformfüggetlenebb és szebb)
- A nyelv fontos bővítést kapott: Tömb mezőinek elérése a pont (.) operátorral. (azaz Tomb['elem'] -> Tomb.elem)
- Új, hasznos belső függvények: Record, SetLength
|
2005. Február 14., Hétfő, 23:00
|
|
Elkezdtem kialakítani az interpreter DLL megfelelőjét. Eddig csak pár eljárás lett
közzétéve, de hamarosan bővül a helyzet. Feltehetőleg a Delphi közeli és DLL
alapú interpreter vonal kicsit ketté válik (a szkript nyelv azonos).
|
2005. Január 29., Szombat, 11:00
|
|
A projekt normális honlapot kapott.
|
Képességek / Features
My name is David Karnok and I study Engineering Informatics at the
Budapest University of Technology and Economics, Hungary.
MyPascal Interpreter is an Open Source project to create a Pascal language based script
interpreter addon for applications. It is written in Delphi language and exists as usable units and
windows DLL. The original concept was to create an interpreter module which can interract with the
compiled program's objects, make calculations and do string operations like the Visual Basic in
Microsoft Office products.
Originally it was made only for Delphi applications but it soon turned out request for support
other languages on Windows systems (VC++, VB, LabView, etc.) and Linux.
The interpreter's main features:
- 95% written in Delphi 6, 5% written x86 assembly
- it is not a component, so installation and upgrade is simple (just overwrite the source files)
- it can be used in its unit form (for Delphi apps) or as a Windows DLL
- it is 100% own code
- can manipulate objects' properties, call methods
- can call callback functions
- can recieve parameters and provide calculation results
- provides simple console-like text output
- uses separated code and data stacks
- code is generated as an instruction tree
- supports run time debugging, stack dumping
The MyPascal language's features
- based on Pascal language syntax with some restrictions
- has no definite variable type (like PHP, unlike other Pascal interpreters)
- structured language
- supports only function declaration
- supports Pascal control-flow statements (IF, FOR, CASE, REPEAT, WHILE, FOR-IN
- supported value types: Boolean, Integer, Double, Complex, String, Dynamic Associative Arrays, References, Objects, Resources only
- no user defined data types
- all variables are initialized to empty
- even local variables can have simple initialized value
- is not object oriented but can handle object properties and methods
- arrays can be indexed with strings, or with the dot operator like records in pascal
- the assign operation is now expression like in C
- the 'break', 'continue' statements can have a parameter
- all function calls must have parenthesis like in C
- string characters can be accessed with functions only
- there is no pointer type but a reference type
- function values can only be set through the 'result' variable
- the 'exit' function supports return value like the 'return' in C
- complex arithmetic calculation is at operator level
The MyPascal interpreter version is currently 1.5 and has only hungarian documentation.
I would like to do the following improvements:
- increased compile-run speed
- more runtime functions
- database connection support
- HTML form documentation (Hungarian and English)
- more debug support
- support for breakpoints
Besides these it needs more testing.
My project's last homepage: http://karnokd.uw.hu/projects_mypascal.html
Included:
- full source code
- implementation examples
- hungarian documentation (.HLP)
- original TDK (=Student's Scientific Conference) documentation in hungarian
A MyPascal nyelv a szabványos Pascal némiképp módosított változata. A módosítások
részben egyszerűsítések, részben fejlesztések. A nyelv megalkotásakor a Delphi [8],
a JAVA [6], valamint a PHP nyelv szolgált mintául [10].
A szkriptnyelv eltérései a Pascal nyelvtől:
- nincsenek szigorúan típusos változók,
- csak függvényeket lehet deklarálni, eljárásokat nem,
- minden helyi változó inicializált, vagyis nem tartalmaz véletlenszerű adatot,
- a helyi változóknak is lehet kezdőértékük,
- a kezdőértékek nem lehetnek kifejezések,
- nincsenek rekordok, felhasználó által deklarált típusok,
- az értékadás művelet is kifejezésnek minősül, így egymásba ágyazhatók,
- egy utasításban többszörös hozzárendelés is elvégezhető,
- az alapvető operátorok automatikus típuskonverziót hajtanak végre,
- FOR...IN...DO szerkezet (új a Delphi 9-ben),
- a paraméter nélküli függvényhívást mindig jelezni kell üres zárójellel,
- minden tömb dinamikus és elemei tetszőleges értékeket tárolhatnak (rekordok is
helyettesíthet),
- a CASE szerkezet nemcsak megszámlálható típusú értékeket tartalmazhat, hanem pl.
szöveget vagy szövegtartományt is,
- A tömbök mindig nullától indexelődnek, továbbá lehetőség van szöveges tömbindexek
megadására is,
- függvények visszatérési értékeit csak a 'result' változón keresztül lehet beállítani,
és nem a függvény nevéhez történő hozzárendeléssel,
- a 'continue' és 'break' pascal utasítások függvényekké váltak, melyeknek meg lehet
adni, hány egymásba ágyazott ciklusból lépjenek ki,
- az 'exit' pascal utasítás is függvénnyé vált, paraméterében megadható a visszatérési
érték, akárcsak a C-ben a 'return',
- nincsenek mutatók, csak korlátozott képességű referenciák,
- a stringek nem kezelhetők tömbként, hanem beépített függvények szolgálnak a karakterek
módosítására és lekérdezésére.
Telepítés
A unitokat a Delphi Library Path útvonalába fel kell venni, illetve DLL esetén a program fájl
mellett kell lennie. Ha közvetlenül implementáljuk saját programunkba, akkor a uses listába fel
kell venni a szükséges unitokat.
Leírás
A számítógépek programozásában a programnyelvek szolgálnak arra, hogy a programozó a
megoldandó problémáját a számítógéppel közölje. Egy hatékony programnyelv nemcsak a probléma
megfogalmazását, hanem a program megtervezését és megírását is megkönnyíti.
Egy probléma számítógépes megoldása annál könnyebb, minél közelebb van az adott probléma a
programozási nyelvhez, azaz a probléma megfogalmazásában használt konstrukciók megtalálhatók a
programnyelvben, és ha az adott programozási nyelv független a számítógéptől. Ezeket a
nyelveket nevezzük magas szintű programnyelveknek [2]. Ugyanakkor a számítógépek csak egy
saját, speciális alacsony szintű nyelvet, a gépi kódot fogadják el, ami nem más, mint nullák
és egyesek sorozata. Ez a sorozat az eredeti probléma magas szintű programnyelven történt
megfogalmazásától nagyon különbözik. A két programnyelv közötti különbség a fordítóprogramok
felhasználásával hidalható át [2].
Egy magas szintű programnyelvről alacsony szintű programnyelvre fordításon kívül vannak olyan
területek is, ahol a fordítókban alkalmazott módszerek jól használhatók. Ilyenek például a
következők [2]:
- szilikon-fordító: a fordítóprogram bemenete egy olyan magas szintű programnyelven
megírt program, ahol a nyelv változói nem memóriahelyekhez tartoznak, hanem áramkörökben
levő logikai jeleket vagy jelcsoportokat reprezentálnak, a kimenete pedig a leírt
logikai rendszernek megfelelő nyomtatott áramkör terve,
- lekérdező-rendszer: egy relációkat és logikai műveleteket tartalmazó feltételrendszert
olyan utasításra fordít le, amellyel egy adatbázisnak a feltételt kielégítő rekordjai
megkereshetők,
- szöveg-átalakító rendszer: bemenete egy szöveg és a szövegre vonatkozó módosító
parancsok, kimenete pedig a szövegnek a parancsokkal átalakított képe.
A fordítók (compilerek) és értelmezők (interpreterek) között van némi különbség.
A fordítók az adott processzor és operációs rendszer számára közvetlenül érthető és
feldolgozható formájúvá alakítják a bemenő forráskódot. Rendkívül hatékony és gyors
kód keletkezik így. Hátránya, hogy a forráskód módosítása után mindig újra és újra le
kell fordítanunk az egész programot (vagy DLL-t). Ezzel szemben az értelmezők a
forráskódot nem közvetlen gépi kódra fordítják le, hanem egy ún. köztes formára.
Ez a köztes forma némiképp hasonlíthat a gépi kódra, de a benne levő utasítások az
interpreternek szólnak és nem közvetlenül a processzornak. Előnyük, hogy menet közben a
forráskód módosítása után újrafordítva a azonnal interpretálhatók. Hátrányuk a lassúság,
mivel a processzor közvetve hajtja végre a programot.
|