An implementation of the SAX programming language based on a session type interpretation of pure linear logic with recursion in the form of the semi-axiomatic sequent calculus Examples: see lecture15.sax and test.sax Creating a standalone executable with mlton % make sax % ./sax lecture15.sax (single file) % make test (regression testing) Running interactively in SML/NJ % sml - CM.make "sources.cm"; - Top.sax "lecture15.sax"; (* testing single file *) Version notes 0.1 first release with Assignment 5 0.2 bug fixes -------------------------------------------------- Grammar -------------------------------------------------- COMMENTS '%' '\n' for single-line comment '(*' '*)' for multi-line, properly nested comment IDENTIFIERS ::= [!"#$%&'()*+,-./:;<=>?@[]^_`{|}~] (all except '_\ and whitespace) ::= [a-zA-Z_0-9']* ::= [a-zA-Z_]* ::= ' | '+ ::= [ \n\t\r\v\f]+ Shadowing of variables is disallowed. OPERATOR PRECEDENCE operator precedence prec 5: * (infix, right assoc) prec 4: -o (infix, right assoc) operator precedence ',' is right assoc operator precedence ';' is right assoc GRAMMAR ::= | '1' | '+' '{' '}' | '&' '{' '}' | '*' | '-o' | '(' ')' ::= ':' [ ',' ] ::= '(' ':' ')' ::= | | ',' | '(' ')' | '(' ')' ::= 'send' | 'recv' '(' ')' | 'fwd' | 'call' * | [ ':' ] '<-' ';' | '(' ')' ::= '=>' [ '|' ] ::= 'type' = | 'proc' * = | 'exec' % requires empty antecedent | 'fail' ::= *