This package provides the classes that realizes the SPiM front end. The features of the front end are:

At the moment the following grammar for the input ASLan++ specification file is supported:
MainSpec ::= "specification" Name "channel_model"
    "CCM" EntityDecl
EntityDecl ::= "entity" UpperName Params? "{" Decls*
    EntityDecl* Body? ConstrDecls? GoalDecls? "}"
   
UpperLetter ::= ["A" .. "Z"]
LowerLetter ::= ["a" .. "z"]
NonZeroDigit ::= ["1" .. "9"]
Digit ::= "0" | NonZeroDigit
Numeral ::= "0" | NonZeroDigit Digit*
Alphanum ::= UpperLetter | LowerLetter | Digit | "_" | "'"
UpperName ::= UpperLetter Alphanum*
LowerName ::= LowerLetter Alphanum*
   
Name ::= LowerName | UpperName
Var ::= UpperName
Vars ::= Var ("," Var)*
Params ::= "(" (Vars ":" Type) ("," Vars ":" Type)* ")"
   
Decls ::= SymbolDecls
Type ::= LowerName
    | "(" Type ")"
   
SymbolDecls ::= "symbols" (SymbolDecl ";")+
SymbolDecl ::= Vars ":" Type
    | < LowerName > ("," < LowerName >)* ":" Type()
   
Term ::= LowerName
    | Var
    | "?"Var
    | "?"
    | FuncApp
    | Term ("." Term)+
    | "{|" Term "|}_" Term
    | "{" Term "}_" Term
    | "{" Term "}_inv" Term
    | "(" Term ")"
    | Name ":(" Term ")"
   
Terms ::= Term ("," Term)*
FuncApp ::= LowerName "(" Terms ")"
Body ::= "body" Stmt
   
Stmt ::= Assign
    | FreshGen
    | EntityGen
    | SymbEntityGen
    | Transmission
    | "{" Stmt* "}"
   
Assign ::= (Var | Name ":(" Var ")" ) ":=" Term ";"
FreshGen ::= (Var | Name ":(" Var ")" ) ":=" "fresh()" ";"
EntityGen ::= "new" Entity ";"
SymbEntityGen ::= "any" Entity ";"
Transmission ::= Term "->" Term ":" Term ";"
   
Entity ::= UpperName ("(" Terms ")")?
   
GoalDecls ::= "goals" (GoalDecl ";")+
GoalDecl ::= ChanGoal | SecrGoal
ChanGoal ::= Name ":(_)" Term "*->" Term
SecrGoal ::= Name ":(_)" "{" ( Term ("," Term)* )+ "}"