# MapleFE **Repository Path**: ycsitcn/MapleFE ## Basic Information - **Project Name**: MapleFE - **Description**: MapleFE is a unified frontend which is able to translate multiple languages into MapleIR. - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 15 - **Created**: 2020-09-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [Origin of MapleFE] This project is to create a programming language frontend, which leverages 'Autogen' to complete most of work of lexing and parsing. The origin of this project is coming from the history in our parst twenty years of work in compiler and programming languages. We are tired of the tons of modifications of existing opensource frontend project like Clang, if we want to do something in new language features. So we decided to have our own frontend, which could be easier to handle new languages. [Key points] 1. Autogen is the key idea which automatically generates lexing/parsing data structures in .h/.cpp files which are further included in the language frontend. The language implementors write .spec files describing the language specifications under the language directory, such as java/. 2. The parsing algorithm is named Wavefront. The rules are categorized into recursions, and recursions are combined into group if they reach each other. The Wavefront parsing is working on the recursion group. It works wave by wave until it reaches the fixed point. [Source code directory] 1. Most programming languages have very similar syntax, so it's very helpful to put the shared part into a common directory. shared/ is for this usage. It contains a) shared data structures representing shared syntax; b) shared parser/translater components; 2. Language specific parts are in their own directory, such as java/. It contains some special part of this language, the language .spec files, and gen_xxx.h/gen_xxx.cpp which are generted by autogen. 3. The tool autogen is under autogen/ 4. The tool recdetect is under recdetec/. It's used to find the recursions and recursion groups. [How to build] 1. cd YOUR_PROJECT_DIR 2. make 3. If you are working at Java frontend, you will see build64/java/java2mpl. This is the executable frontend. [How to test] 1. cd YOUR_PROJECT_DIR/test 2. ./runtests.pl all You can find all Java test cases in YOUR_PROJECT_DIR/test/java2mpl. Right now only java test cases are used.