SourceForge.net Logo MyPascal Interpreter
By Karnok Dávid
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.

(C) Karnok Dávid, 2005