Menu

Home

Marcel Schaible Rainer Müller FMA Christian Ritzler Leinad

Content of this page


Welcome to the OpenPEARL compiler wiki!

PEARL is a high level procedural programming language, which was especially designed for the demanding need to have an expressive and comfortable language for solving multitasking problems when controlling technincal processes. PEARL is an abbreviation for "(P)rocess and (E)xperiment (A)utomation (R)ealtime (L)anguage".

In 1998 PEARL-90 was standardized by the Deutsches Institut für Normung e.V. in DIN 66253-2.

PEARL provides the standard data types and structures known from other procedural languages like e.g. PASCAL.
Additionally PEARL brings special language constructs for managing real-time and multitasking tasks.

Implementing a full blown compiler for PEARL-90 is a huge effort. Therefore we decided to take an evolutionary approach. First we implement a small but feature rich subset of PEARL-90 called "OpenPEARL" (This is done in the style of the well known Small-C compiler from Ron Cain and James Hendrix.).

The development of the OpenPEARL system and applications is performed with Linux. Solutions with VMware or VirtualBox were successful for Windows or MacOS users.


Structure of the OpenPEARL System

PEARL is designed to be platform independend. To execute a PEARL application on a specific platform, there is the need of a runtime system which provides scheduling an i/o. This is reflected in the structure of the OpenPEARL system:
1. a compiler written in Java and ANTRL transforms PEARL code into platform independent C++ code
2. a runtime system provides the platform specific API for scheduling and data types

Currently two target systems are focussed:

  • Linux (out of the box)
    Any Linux distribution with C++ should work. Normal users may run PEARL programs only with the normal linux scheduler, which forbits the usage of priorisized task. If a user run the application with root permissions or if the system administrator allows normal user processes to use the realtime scheduler, the preemptive priority scheduling is available.
    No patches and extensions are planned to be used. This solution provides an easy entry to PEARL for students.
    Raspberry PI systems may be operated with this platform.

  • LPC1768-Landtiger Evaluation Board (ARM Cortex-M3)
    This approach is the prove of concept of architecture in the runtime system. FreeRTOS is used as scheduler. This platform may be the starting point for other microcontroller systems.

  • ESP32
    This approach attempts to use the resources of the ESP32 system on chip. Currently scheduling works and first device drivers are in production.

Structure of the Files in the Repository

The top layer contains several directories. For details see the wiki page behind the directory name.

  • compiler contains the compiler which compiles PEARL-code into C++-code
  • configuration contains the system configuration menu to set flags for the installation
  • demos contains demo applications
  • errorchecker is part of the test suite to verify expected error messages from the build system
  • imc3 contains the Inter Module Checker, which verifies that each import (SPC) matches it declration (DCL) of global symbols
  • language_report contains the language description of OpenPEARL
  • runtime contains all files for the runtime system for all supported targets
  • testsuite contains tests for successful build and runs as well as tests for expected compiler messages
  • wikiImages contains the suorce file for images in this wiki

Getting started

When you decide to play around with OpenPEARL you are ether a user who wants to write PEARL applications, or a developer who wants to study and/or extend the features of the OpenPEARL system. Please check the description below according your needs:

Check the demo applications as first steps to verify your installation.


Project Status

The first release of OpenPEARL is scheduled for end of the year 2017. Most elements of the language report are implemented except the open issues listed below:

Open Issues in the compiler section (Java):

Open Issues in the runtime system (C++):



How to contribute?

Testing and bug reporting is always appreciated.
Please add tickets if you encounter some bugs in documentation or implementation.
Ticket reporting is open to all registered sourceforge users.

If you want do join the development team, please

Some open topics:

  • Static code analysis during compilation to check, if
    • all paths of a function contain a RETURN statement
    • all statements are reachable
    • all defined variables are used (on module base)
    • all used variables are initialized (on module base)
  • More driver support like CAN-Bus or TCP/IP-sockets are appreciated
  • OpenPEARL Testframework
  • Support for OpenPEARL in a modern IDE like Visual Code Studio
  • Interprocess Communication between TASKS and other OS processes
  • Support for communication with OpenCV
  • Tool for debugging an AST

Differences to PEARL90 and RTOH-UH


Version History

A list of versions is given here.


License

Most parts of the project are released under a derivative of the BSD license. The details can be found here.

Some 3rd party elements are distrubuted under their indivual license:


Related

Wiki: BSD license
Wiki: Chan FatFs license
Wiki: Cortex Microcontroller System Interface Standard
Wiki: Demo Applications
Wiki: Detailed Structure of the OpenPEARL System
Wiki: Differences between OpenPEARL and PEARL90
Wiki: Differences between RTOS-UH and OpenPEARL
Wiki: Docker
Wiki: FreeRTOS license
Wiki: Getting Started as Developer
Wiki: Getting Started as User
Wiki: LpcOpen license
Wiki: Preprocessor
Wiki: Realize Error Recovery
Wiki: Tutorial
Wiki: Version History
Wiki: folderTestsuite