Skip to content

Latest commit

 

History

History
124 lines (78 loc) · 3.21 KB

README.md

File metadata and controls

124 lines (78 loc) · 3.21 KB

New frontend for ABS

Installing dependencies

BNFC

Description of BNF Converter (BNFC):

The BNF Converter is a compiler construction tool generating a compiler front-end from a Labelled BNF grammar. It is currently able to generate C, C++, C#, Haskell, Java, and OCaml, as well as XML representations.

To install:

  1. Grab a recent binary for your platform from http://bnfc.digitalgrammars.com/
  2. or if you have ghc and cabal, build&install bnfc with cabal install BNFC.

Building the ABS frontend

The general rule is to build the frontend specifically for the language that you are using for your (backend) compiler. To build the frontend, invoke bnfc for your compiler language:

cd src/
bnfc -m --language ABS.cf

Building for Haskell

You need the happy parser and alex lexer. Install them with:

cabal install happy alex

Then run bnfc with:

cd src/
bnfc -m --haskell ABS.cf

Files generated:

  • AbsABS.hs : holds the Abstract Syntax Tree (AST) datatype for the ABS language
  • PrintABS.hs : module for pretty-printing ABS-AST code.
  • LexABS.x : the lexer specification in Alex format.
  • ParABS.y : the parser specification in Happy format.
  • SkelABS.hs : helper file for TestABS.hs
  • ErrM.hs : helper file used by other-generated files
  • TestABS.hs: example program that parses and prints ABS source code from input.
  • Makefile: a file to automatically build the lexer/parser and the test example

To generate manually the haskell lexer and parser:

happy -gca ParABS.y
alex -g LexABS.x

These commands generate the Haskell source-code for the lexer (LexABS.hs) and parser (ParABS.hs).

You can then use the all of these .hs sources for your Haskell-based backend compiler.

Building for Java

You need the java-cup-11b.jar parser and Jlex lexer .Install them with

cabal install cup Jlex

Then run bnfc with

cd src/

bnfc -m --java ABS.cf

Files generated:

  • Absyn : holds the Abstract Syntax Tree (AST) datatype for the ABS language
  • PrettyPrinter.java : module for pretty-printing ABS-AST code.
  • Yylex : the lexer specification generated by the BNFC converter.
  • ABS.cup : the parser specification in cup format.
  • VisitSkel.java : helper file for Test.java
  • AbstractVisitor.java : the BNFC-Generated Abstract Visitor file.
  • Test.java: example program that parses and prints ABS source code from input.
  • Makefile: a file to automatically build the lexer/parser and the test example

To generate manually the java lexer and parser.

java -cp ".:lib:lib/java-cup-11b.jar" ParABS.x

java -lex LexABS.y

These commands generate the java source code for lexer and parser

You can then use all of these .java sources for developing Java-based backend compiler.

To check if the abs file parses through the java parser, use the below command:

cd gen/java

java -cp ".:lib:lib/java-cup-11b.jar" ABS.Test ../../test/While.abs

(Optional) Generate documentation for any BNFC-language

You need to install txt2tags program for your distribution.

After you run bnfc (regardless of your backend language), you can generate HTML documentation for the ABS grammar with:

txt2tags -t html DocABS.txt

or PDF documentation with:

txt2tags -t tex DocABS.txt
pdflatex DocABS.tex