file: declarationlist EOF declarationlist: (* EMPTY *) | declarationlist declaration declaration: classspec | adtspec | groundsignature | typedef | groundtermdef datastart: BEGIN ID classspec: classstart import_maybe classbody END ID classstart: datastart typeparameters COLON finalorloose CLASSSPEC finalorloose: (* EMPTY *) | FINAL typeparameters: (* EMPTY *) | OBRACKET paramdeclarations CBRACKET paramdeclarations: paramdeclaration | paramdeclarations COMMA paramdeclaration paramdeclaration: idlist COLON optvariance TYPE optvariance: (* EMPTY *) | POS | NEG | MIXED | OPAREN numberorquestion COMMA numberorquestion CPAREN numberorquestion: QUESTIONMARK | VALUE classbody: classsection | classbody classsection classsection: inheritsection | visibility attributesection semicolon_maybe | visibility methodsection semicolon_maybe | definitionsection | classconstructorsection semicolon_maybe | assertionsection | creationsection | theoremsection | requestsection semicolon_maybe visibility: (* EMPTY *) | PUBLIC | PRIVATE inheritsection: INHERIT FROM ancestor | inheritsection COMMA ancestor ancestor: ID renaming | ID OBRACKET arglist CBRACKET renaming renaming: (* EMPTY *) | RENAMING renamelist renamelist: ID AS ID | renamelist AND ID AS ID attributesection: ATTRIBUTE ID COLON pvstype | attributesection SEMICOLON ID COLON pvstype methodsection: METHOD ID COLON pvstype | methodsection SEMICOLON ID COLON pvstype definitionsection: DEFINING ID COLON pvstype formula | definitionsection ID COLON pvstype formula classconstructorsection: CONSTRUCTOR classconstructor | classconstructorsection SEMICOLON classconstructor classconstructor: ID COLON pvstype assertionsection: assertionstart ID COLON formula | assertionsection ID COLON formula assertionstart: ASSERTION import_maybe assertionselfvar varlist_maybe assertionselfvar: (* EMPTY *) | SELFVAR ID COLON SELF varlist_maybe: (* EMPTY *) | varlist_maybe VAR vardeclarations creationsection: creationstart ID COLON formula | creationsection ID COLON formula creationstart: CREATION import_maybe varlist_maybe theoremsection: theoremstart ID COLON formula | theoremsection ID COLON formula theoremstart: THEOREM import_maybe varlist_maybe requestsection: REQUEST ID COLON pvstype | requestsection SEMICOLON ID COLON pvstype all_quant: FORALL OPAREN typedvarlist CPAREN ex_quant: EXISTS OPAREN typedvarlist CPAREN lambda_quant: LAMBDA OPAREN typedvarlist CPAREN hol_formula: all_quant colonordot hol_formula %prec QUANTOR | ex_quant colonordot hol_formula %prec QUANTOR | lambda_quant colonordot hol_formula %prec QUANTOR | LET bindinglist semicolonorcomma_maybe IN hol_formula %prec QUANTOR | hol_formula IFF hol_formula | hol_formula IMPLIES hol_formula | hol_formula OR hol_formula | hol_formula AND hol_formula | IF hol_formula THEN hol_formula elseifs ELSE hol_formula | NOT hol_formula | hol_formula OBSEQ hol_formula | hol_formula EQUAL hol_formula | hol_formula INFIX_REL hol_formula | hol_formula INFIX_SHARP hol_formula | hol_formula INFIX_ADD hol_formula | hol_formula INFIX_MUL hol_formula | hol_formula INFIX_EXP hol_formula | ALWAYS hol_formula FOR instclass_maybe OBRACE idlist CBRACE | EVENTUALLY hol_formula FOR instclass_maybe OBRACE idlist CBRACE | CASES hol_formula OF caselist semicolonorcomma_maybe ENDCASES | hol_formula WITH OBRACKET updatelist CBRACKET | hol_formula DOT qualifiedid | hol_formula hol_formula %prec APPLICATION | hol_base hol_base: TRUE | FALSE | PROJ_N | VALUE | qualifiedid | type_annotation | OPAREN hollist CPAREN colonordot: COLON | DOT vardeclarations: vardeclaration | vardeclarations SEMICOLON vardeclaration vardeclaration: idlist COLON pvstype qualifiedid: idorinfix | ID DOUBLECOLON idorinfix | ID OBRACKET arglist CBRACKET DOUBLECOLON idorinfix idorinfix: pareninfix | ID pareninfix: OPAREN INFIX_EXP CPAREN | OPAREN INFIX_MUL CPAREN | OPAREN INFIX_ADD CPAREN | OPAREN INFIX_SHARP CPAREN | OPAREN INFIX_REL CPAREN elseifs: (* EMPTY *) | elseifs elseif hol_formula THEN hol_formula elseif: ELSEIF | ELSIF bindinglist: binding | bindinglist semicolonorcomma binding binding: ID EQUAL hol_formula | ID COLON pvstype EQUAL hol_formula semicolonorcomma: COMMA | SEMICOLON type_annotation: OPAREN hol_formula COLON pvstype CPAREN hollist: hol_formula | hollist COMMA hol_formula caselist: casepattern COLON hol_formula | caselist semicolonorcomma casepattern COLON hol_formula casepattern: ID | ID OPAREN idlist CPAREN updatelist: update | updatelist COMMA update update: hol_formula ASSIGN hol_formula instclass_maybe: (* EMPTY *) | ID DOUBLECOLON | ID OBRACKET arglist CBRACKET DOUBLECOLON hol_formula_maybe: (* EMPTY *) | hol_formula formula: PVS_FORMULA SEMICOLON | hol_formula SEMICOLON typedvarlist: vardeclaration | typedvarlist COMMA vardeclaration adtspec: adtstart adtbody END ID adtstart: datastart typeparameters COLON ADT adtbody: adtfield | adtbody adtfield adtfield: adtconstructorlist semicolon_maybe adtconstructorlist: CONSTRUCTOR adtconstructor | adtconstructorlist SEMICOLON adtconstructor adtconstructor: ID adtaccessors COLON pvstype adtaccessors: (* EMPTY *) | OPAREN idlist CPAREN groundsignature: signaturestart import_maybe signaturebody END ID signaturestart: datastart typeparameters COLON GROUNDSIGNATURE signaturebody: signaturesection | signaturebody signaturesection signaturesection: signaturetype | signaturesymbolsection semicolon_maybe signaturetype: typedef typedef: typedefstart typedefeq typedefeq: (* EMPTY *) | EQUAL pvstype typedefstart: typekeyword ID typeparameters typekeyword: GROUNDTYPE | TYPE signaturesymbolsection: CONSTANT signaturesymbol | signaturesymbolsection SEMICOLON signaturesymbol signaturesymbol: termdef groundtermdef: groundtermkeyword termdef semicolon_maybe groundtermkeyword: CONSTANT | GROUNDTERM termdef: termdefstart COLON pvstype hol_formula_maybe termdefstart: termdefid typeparameters termdefid: ID | pareninfix pvstype: SELF | CARRIER | BOOL | OBRACKET pvstypelist ARROW pvstype CBRACKET | OBRACKET pvstypelist CBRACKET | pvstype starproduct %prec med_type_prec | pvstype ARROW pvstype | OPAREN pvstype CPAREN | qualifiedid | ID OBRACKET arglist CBRACKET starproduct: star pvstype %prec star_prec | starproduct star pvstype %prec star_prec pvstypelist: pvstype %prec med_type_prec | pvstypelist COMMA pvstype %prec med_type_prec star: INFIX_MUL arglist: pvstype | arglist COMMA pvstype import_maybe: (* EMPTY *) | import_maybe IMPORTING theory theory: ID | ID OBRACKET arglist CBRACKET idlist: ID | idlist COMMA ID semicolon_maybe: (* EMPTY *) | SEMICOLON semicolonorcomma_maybe: (* EMPTY *) | semicolonorcomma
%token EOF %token EQUAL %token OBSEQ %token COLON %token DOUBLECOLON %token ASSIGN %token SEMICOLON %token COMMA %token ARROW %token DOT %token QUESTIONMARK %tokenOBRACKET %token CBRACKET %token OPAREN %token CPAREN %token OBRACE %token CBRACE %token PROJ_N %token INFIX_EXP %token INFIX_MUL %token INFIX_ADD %token INFIX_SHARP %token INFIX_REL %token CLASSSPEC /* KEYWORD */ %token FINAL /* KEYWORD */ %token END /* KEYWORD */ %token TYPE /* KEYWORD */ %token GROUNDTYPE /* KEYWORD */ %token GROUNDTERM /* KEYWORD */ %token GROUNDSIGNATURE /* KEYWORD */ %token POS /* KEYWORD */ %token NEG /* KEYWORD */ %token MIXED /* KEYWORD */ %token CONSTANT /* KEYWORD */ %token ADT /* KEYWORD */ %token IMPORTING /* KEYWORD */ %token INHERIT /* KEYWORD */ %token RENAMING /* KEYWORD */ %token FROM /* KEYWORD */ %token AS /* KEYWORD */ %token CONSTRUCTOR /* KEYWORD */ %token ATTRIBUTE /* KEYWORD */ %token METHOD /* KEYWORD */ %token DEFINING /* KEYWORD */ %token SELFVAR /* KEYWORD */ %token VAR /* KEYWORD */ %token ASSERTION /* KEYWORD */ %token THEOREM /* KEYWORD */ %token PRIVATE /* KEYWORD */ %token PUBLIC /* KEYWORD */ %token BOOL /* KEYWORD */ %token REQUEST /* KEYWORD */ %token CREATION /* KEYWORD */ %token BEGIN /* KEYWORD */ %token SELF /* KEYWORD */ %token CARRIER /* KEYWORD */ /* for formulae */ %token TRUE /* KEYWORD */ %token FALSE /* KEYWORD */ %token CASES /* KEYWORD */ %token OF /* KEYWORD */ %token ENDCASES /* KEYWORD */ %token IF /* KEYWORD */ %token THEN /* KEYWORD */ %token ELSE /* KEYWORD */ %token ELSEIF /* KEYWORD */ %token ELSIF /* KEYWORD */ %token LAMBDA /* KEYWORD */ %token AND /* KEYWORD */ %token NOT /* KEYWORD */ %token OR /* KEYWORD */ %token IMPLIES /* KEYWORD */ %token IFF /* KEYWORD */ %token FORALL /* KEYWORD */ %token EXISTS /* KEYWORD */ %token ALWAYS /* KEYWORD */ %token EVENTUALLY /* KEYWORD */ %token FOR /* KEYWORD */ %token WITH /* KEYWORD */ %token LET /* KEYWORD */ %token IN /* KEYWORD */ /********************************* ** precedences *********************************/ %right QUANTOR %left IFF %right IMPLIES %left OR %left AND %left IF THEN ELSE %left NOT %nonassoc OBSEQ EQUAL INFIX_REL %left INFIX_SHARP %left INFIX_ADD %right ARROW %nonassoc med_type_prec %left INFIX_MUL star_prec %right INFIX_EXP %left OPAREN %left WITH %left CASES LAMBDA FORALL EXISTS ALWAYS EVENTUALLY LET %left TRUE FALSE PROJ_N ID VALUE %left DOT %left APPLICATION %token ID %token VALUE %token PVS_FORMULA %token STRING /* the include token is filtered and handled in the abstract_lexer */ %token INCLUDE
[' ' '\t'] (* skip blanks *) '\n' (* skip blanks *) '=' { EQUAL } '~' { OBSEQ } "::" { DOUBLECOLON } ":=" { ASSIGN } ':' { COLON } ';' { SEMICOLON } ',' { COMMA } '(' { OPAREN } ')' { CPAREN } '[' { OBRACKET } ']' { CBRACKET } '(' { OPAREN } ')' { CPAREN } "->" { ARROW } '{' { OBRACE} '}' { CBRACE} '%' [^'\n'] * -> Comment "(*" -> Comment "PVS " { PVS_FORMULA( f ) } '"' -> String "Proj_"[0-9]+ { PROJ_N(i) } ['A'-'Z' 'a'-'z']['A'-'Z' 'a'-'z' '_' '0'-'9' '?']* { ID( lexeme lexbuf ) } ['0'-'9']+ { VALUE(int_of_string(lexeme lexbuf))} _ { raise Parsing.Parse_error } eof { EOF }PVS formulas start with "PVS " and have to be terminated with "ENDPVS". Strings are enclosed in double quotes ("), Backslash (\) can be used as escape character (eg "\""). Comments are either PVS style starting with "%" including anything until the end of the line or CAML style "(* ... *)".