* Author: Kaustuv Chaudhuri <kaustuv+@cs.cmu.edu>
* Modified: Frank Pfenning <fp@cs.cmu.edu>
* Modified: Joshua Wise <jwise@andrew.cmu.edu>
* Author: Kaustuv Chaudhuri <kaustuv+@cs.cmu.edu>
* Modified: Frank Pfenning <fp@cs.cmu.edu>
* Modified: Joshua Wise <jwise@andrew.cmu.edu>
fun mark (e, (left, right)) = A.Marked (Mark.mark' (e, ParseState.ext (left, right)))
fun markstm (e, (left, right)) = A.MarkedStm (Mark.mark' (e, ParseState.ext (left, right)))
fun markfunction (e, (left, right)) = A.MarkedFunction (Mark.mark' (e, ParseState.ext (left, right)))
fun mark (e, (left, right)) = A.Marked (Mark.mark' (e, ParseState.ext (left, right)))
fun markstm (e, (left, right)) = A.MarkedStm (Mark.mark' (e, ParseState.ext (left, right)))
fun markfunction (e, (left, right)) = A.MarkedFunction (Mark.mark' (e, ParseState.ext (left, right)))
-fun marktypedef (e, (left, right)) = A.MarkedTypedef (Mark.mark' (e, ParseState.ext (left, right)))
+fun marktypedef (e, (left, right)) = T.MarkedTypedef (Mark.mark' (e, ParseState.ext (left, right)))
- | paramlist of A.variable list
- | param of A.variable
- | typedecl of A.ident * A.typedef
- | memberlist of (A.ident * A.vtype) list
- | member of (A.ident * A.vtype)
+ | paramlist of T.variable list
+ | param of T.variable
+ | typedecl of T.ident * T.typedef
+ | memberlist of (T.ident * T.vtype) list
+ | member of (T.ident * T.vtype)
decls : (Symbol.empty, Symbol.empty)
| typedecl decls (AUP.append_typedef decls typedecl)
decls : (Symbol.empty, Symbol.empty)
| typedecl decls (AUP.append_typedef decls typedecl)
param : IDENT COLON vtype (IDENT, vtype)
typedecl : STRUCT IDENT LBRACE RBRACE SEMI
param : IDENT COLON vtype (IDENT, vtype)
typedecl : STRUCT IDENT LBRACE RBRACE SEMI
- (IDENT, marktypedef (A.Struct ([]), (STRUCTleft, SEMIright)))
+ (IDENT, marktypedef (T.Struct ([]), (STRUCTleft, SEMIright)))
- (IDENT, marktypedef (A.Struct (memberlist), (STRUCTleft, SEMIright)))
+ (IDENT, marktypedef (T.Struct (memberlist), (STRUCTleft, SEMIright)))
(A.Assign(exp1, exp2))
| exp asnop exp %prec ASNOP
(A.AsnOp(asnop, exp1, exp2))
(A.Assign(exp1, exp2))
| exp asnop exp %prec ASNOP
(A.AsnOp(asnop, exp1, exp2))
+ | exp PLUSPLUS %prec ASNOP
+ (A.AsnOp(A.PLUS, exp, A.ConstExp(0w1)))
+ | exp MINUSMINUS %prec ASNOP
+ (A.AsnOp(A.MINUS, exp, A.ConstExp(0w1)))
| exp (markstm (A.Effect (exp), (expleft, expright)))
control : IF LPAREN exp RPAREN block elseoption
| exp (markstm (A.Effect (exp), (expleft, expright)))
control : IF LPAREN exp RPAREN block elseoption
| MINUS exp %prec UNARY (mark (A.OpExp (A.NEGATIVE, [exp]), (MINUSleft,expright)))
| BITNOT exp %prec UNARY (mark (A.OpExp (A.BITNOT, [exp]), (BITNOTleft,expright)))
| BANG exp %prec UNARY (mark (A.OpExp (A.BANG, [exp]), (BANGleft,expright)))
| MINUS exp %prec UNARY (mark (A.OpExp (A.NEGATIVE, [exp]), (MINUSleft,expright)))
| BITNOT exp %prec UNARY (mark (A.OpExp (A.BITNOT, [exp]), (BITNOTleft,expright)))
| BANG exp %prec UNARY (mark (A.OpExp (A.BANG, [exp]), (BANGleft,expright)))