5.16.7.5. Binding Header Definition

Start data section to src/flx_parse.mly[12 /35 ] Next Prev First Last
   999: code_spec:
  1000:   | STRING { `StrTemplate (snd $1) }
  1001:   | CSTRING { `Str (snd $1) }
  1002:   | IDENT { `Identity }
  1003: 
  1004: requirement:
  1005:   | qualified_name
  1006:     {
  1007:       `Named_req (qualified_name_of_expr $1)
  1008:     }
  1009: 
  1010:   | BODY code_spec { `Body_req $2 }
  1011:   | HEADER code_spec { `Header_req $2 }
  1012:   | PROPERTY STRING { `Property_req (snd $2) }
  1013:   | PACKAGE code_spec { `Package_req $2 }
  1014: 
  1015: requirement_atom:
  1016:   | requirement { `RREQ_atom $1 }
  1017:   | LPAR requirements RPAR { $2 }
  1018: 
  1019: requirement_and:
  1020:   | requirement_and AND requirement_atom { `RREQ_and ($1,$3) }
  1021:   | requirement_atom { $1 }
  1022: 
  1023: requirement_or:
  1024:   | requirement_or OR requirement_and { `RREQ_or ($1,$3) }
  1025:   | requirement_and { $1 }
  1026: 
  1027: requirements:
  1028:   | requirements COMMA requirement_or { `RREQ_and ($1,$3) }
  1029:   | requirement_or { $1 }
  1030: 
  1031: requires_clause:
  1032:   | REQUIRES requirements { $2 }
  1033:   | { `RREQ_true }
  1034: 
  1035: binding_header:
  1036:   | HEADER code_spec requires_clause SEMI
  1037:   {
  1038:       let sr = rstoken $1 $4 in
  1039:       `AST_insert (sr, "_root", dfltvs, $2, `Header ,$3)
  1040:   }
  1041: 
  1042:   | BODY code_spec requires_clause SEMI
  1043:   {
  1044:      let sr = rstoken $1 $4 in
  1045:     `AST_insert (sr, "_root", dfltvs, $2, `Body, $3)
  1046:   }
  1047: 
  1048:   | HEADER EQUAL code_spec requires_clause SEMI
  1049:   {
  1050:       let sr = rstoken $1 $5 in
  1051:       `AST_insert (sr, "_root", dfltvs, $3, `Header, $4)
  1052:   }
  1053: 
  1054:   | BODY EQUAL code_spec requires_clause SEMI
  1055:   {
  1056:      let sr = rstoken $1 $5 in
  1057:     `AST_insert (sr, "_root", dfltvs, $3, `Body, $4)
  1058:   }
  1059: 
  1060:   | HEADER declname EQUAL code_spec requires_clause SEMI
  1061:     {
  1062:       let name,vs = hd $2 in
  1063:       let sr = rstoken $1 $6 in
  1064:       let stmt = `AST_insert (sr,name,vs, $4, `Header, $5) in
  1065:       fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
  1066:     }
  1067: 
  1068:   | BODY declname EQUAL code_spec requires_clause SEMI
  1069:     {
  1070:       let name,vs = hd $2 in
  1071:       let sr = rstoken $1 $6 in
  1072:       let stmt = `AST_insert (sr,name,vs, $4, `Body, $5) in
  1073:       fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
  1074:     }
  1075: 
  1076:   | REQUIRES requirements SEMI
  1077:   {
  1078:     let sr = rstoken $1 $3 in
  1079:     `AST_insert (sr, "_root", dfltvs, `Str "", `Body, $2)
  1080:   }
  1081: 
  1082:   | NAME REQUIRES requirements SEMI
  1083:   {
  1084:     let sr = rstoken (fst $1) $4 in
  1085:     `AST_insert (sr, snd $1, dfltvs, `Str "", `Body, $3)
  1086:   }
  1087: 
End data section to src/flx_parse.mly[12]