Back to the Coda Page

The compiler Page

Grammar

	
	file:
	    declarationlist EOF		

	
	declarationlist:
	    (* EMPTY *)	         	
	  | declarationlist declaration	


	
	declaration:
	    classspec			
	  | adtspec			
	  | groundsignature		
	  | typedef			
	  | typeabbrev			
	  | termdef			


	
	typedef:
	    GROUNDTYPE ID typeparameters



	
	typeabbrev:
	    TYPE ID EQUAL pvstype	

	
	termdef:
	    GROUNDTERM ID COLON pvstype
	  | GROUNDTERM pareninfix COLON pvstype



	
	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		
	  | 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


	
	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 casevarlist CPAREN
	      			

	
	casevarlist:				
	    ID			
	  | casevarlist COMMA ID
	      			

	
	updatelist:				
	    update		
	  | updatelist COMMA update
	                        

	
	update:
	    hol_formula ASSIGN hol_formula
	                        

	
	instclass_maybe:
	    (* EMPTY *)   	
	  | ID DOUBLECOLON	
	  | ID OBRACKET arglist CBRACKET DOUBLECOLON


	
	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:
	    TYPE ID	 		

	
	signaturesymbolsection:
	    CONSTANT signaturesymbol	
	  | signaturesymbolsection SEMICOLON signaturesymbol  

	
	signaturesymbol:
	    ID COLON pvstype		
	  | pareninfix COLON pvstype    

	
	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		


Tokens and Keywords

	%token EOF
	%token EQUAL
	%token OBSEQ
	%token COLON
	%token DOUBLECOLON
	%token ASSIGN
	%token SEMICOLON
	%token COMMA
	%token ARROW
	%token DOT
	%token QUESTIONMARK

	%token  OBRACKET
	%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 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

Lexic

The lexer defines the following tokens. All other tokens are keywords.
       [' ' '\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 "(* ... *)".

Back to the Coda Page


Last modified: 24 Jan 2002 by Hendrik