PAMOJA is a Component Framework I have developed as part of my PhD research work.
It is a prototype implementation of a component framework for language front-end processing consisting of light-weight components and wizards, written in Java, that runs on the NetBeans Integrated Development Environment (IDE).
PAMOJA provides a collection of components that deal with the transformation of language terms from a concrete textual form to Abstract Syntax Trees (ASTs) and the converse transformation from abstract to the concrete and several wizards for generating Java source-code from formal language specifications.
Moving from concrete text to ASTs and back is divided into three levels, i.e., lexical analysis, concrete syntax and abstract syntax. Therefore, to deal with each level, PAMOJA provides a collection of components (for holding data and mappings), views and editors ( for manipulating data), and generators which take a language specification and produce language-specific support data or language-specific source code. Generators for language-specific support data are hidden within the data components whereas generators which generate source-code are implemented as wizards. In addition, PAMOJA provides components for holding language specifications such as grammars and signatures.
PAMOJA Design Goals
The main design goal of PAMOJA is to investigate how the concepts and methods of Component-Based Software Development can be applied to the field of programming language engineering with respect to:
- Flexibility – Many kinds of applications – without being full compilers or IDEs – need some language processing. Availability of language processing components in a general-purpose development environment facilitates incorporation of language processing in all kinds of applications.
- Ease-of-use – The availability of language processing components in a general-purpose component framework make language processing techniques available to occasional or first-time users with little effort. Such users can use language processing techniques without the problems of learning to use a large special-purpose language-processing environment and relating to his application.
- Variety - Having at one’s disposal a variety of components for a certain Language processing task (e.g. several parser components with the same interface but parsing according to different strategies) makes it easier to experiment with different techniques and to pick the component most suited for the task at hand. This can be a great asset in an educational environment.
Intended Use of PAMOJA
PAMOJA supports the development of language front-ends in ways commonly found in modern IDEs like NetBeans, Eclipse and Delphi:
It provides language engineers with an interactive development style using:
- drag and drop approach for quick and easy construction of large parts of a language front-end with little or no coding, and
- use of wizards that allow a user to rapidly generate language-specific pieces of code. The user is guided through a multi-step dialogue to set his preferences, which are then used to customize some existing language processing components and/or generate some specialized source code-based language processing components.
PAMOJA components are being used to develop a couple of non-trivial applications.
a) Compiler Lab
- Regular Expressions lab – this is a tool for experimenting with regular expressions and their analysis, as well as mapping of regular expressions to Non-Deterministic Finite Automaton by means of Thompson’s algorithm. These are standard topics on any course on formal languages and automata theory.
- Grammar Workbench – another tool providing facilities for developing and analyzing grammars and experimenting with various parsing algorithms. The term grammar workbench is used in various places with different meanings. Here it is meant to be a tool for developing and analyzing grammar and generating different kinds of parsers. The workbench is composed of existing grammar-aware components. It provides the following features:
- Reading and editing of a grammar.
- Analysis of grammar to provide information on the following properties: Reachable, Nullable, First, Last and Follow.
- Compute lookahead sets and checking for ELL(1) condition.
- Offer several parsing methods with interpreters and/or generators. For instance, SLR(1), generated recursive descent parsers.
- Several parser options such as tree building.
b) Front-end for a programming language – a front-end editor supporting textual edit operations of programs for the PL/O programming language will be developed from PAMOJA components.
Downloads, License Issues