file: declarationlist EOF declarationlist: (* EMPTY *) | declarationlist declaration declaration: classspec | adtspec | groundsignature | typedef | groundtermdef groundtermdef: groundtermkeyword termdef semicolon_maybe groundtermkeyword: CONSTANT | GROUNDTERM 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 ARROW pvstype | attributesection SEMICOLON ID COLON pvstype ARROW pvstype methodsection: METHOD ID COLON pvstype ARROW pvstype | methodsection SEMICOLON ID COLON pvstype ARROW pvstype definitionsection: DEFINING ID COLON pvstype ARROW pvstype formula | definitionsection ID COLON pvstype ARROW pvstype formula classconstructorsection: CONSTRUCTOR classconstructor | classconstructorsection SEMICOLON classconstructor classconstructor: ID COLON pvstype | ID COLON pvstype ARROW 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 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 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 | 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 | ID adtaccessors COLON pvstype ARROW 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 signaturesymbolsection: CONSTANT signaturesymbol | signaturesymbolsection SEMICOLON signaturesymbol signaturesymbol: termdef typedef: typedefstart typedefeq typedefeq: (* EMPTY *) | EQUAL pvstype typedefstart: typekeyword ID typeparameters typekeyword: GROUNDTYPE | TYPE 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 | qualifiedid | ID OBRACKET arglist CBRACKET pvstypelist: pvstype | pvstypelist COMMA pvstype 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 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 */ %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 %left INFIX_MUL %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 "(* ... *)".