Back to the Coda Page
The compiler Page
Grammar
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 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 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
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 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 */
/*********************************
** 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
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:
18 Sep 2002
by Hendrik