packages feed

BNFC-meta-0.4: examples/jll/JavaletteLight.hs

{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}

module JavaletteLight where

import Language.LBNF.Compiletime

import Language.LBNF(lbnf, dumpCode, bnfc)
bnfc [lbnf|

Fun.      Prog     ::= Typ Ident "(" ")" "{" [Stm] "}" ;

SDecl.    Stm      ::= Typ Ident ";"  ;
SAss.     Stm      ::= Ident "=" Expr ";"  ;
SIncr.    Stm      ::= Ident "++" ";"  ;
SWhile.   Stm      ::= "while" "(" Expr ")" "{" [Stm] "}" ;
SFunApp.  Stm      ::= Ident "(" [Expr] ")" ";" ;
_.        Stm      ::= Stm ";" ;

ELt.      Expr0     ::= Expr1 "<" Expr1 ;
EPlus.    Expr1     ::= Expr1 "+" Expr2 ;
ETimes.   Expr2     ::= Expr2 "*" Expr3 ;
EVar.     Expr3     ::= Ident ;
EInt.     Expr3     ::= Integer ;
EDouble.  Expr3     ::= Double ;
$.        Expr3     ::= "$" Ident;
[].       [Stm]    ::= ;
(:).      [Stm]    ::= Stm [Stm] ;

separator Expr "," ;




_.  Expr      ::= Expr0 ;
_.  Expr0     ::= Expr1 ;
_.  Expr1     ::= Expr2 ;
_.  Expr2     ::= Expr3 ;
_.  Expr3     ::= "(" Expr ")" ;

TInt.     Typ  ::= "int" ;
TDouble.  Typ  ::= "double" ;
|]