5.16.5.5. Binding Header Definition

Start data section to src/flx_parse.mly[10 /33 ] Next Prev First Last
   811: code_spec:
   812:   | STRING { `StrTemplate (snd $1) }
   813:   | CSTRING { `Str (snd $1) }
   814: 
   815: requirement:
   816:   | qualified_name
   817:     {
   818:       `Named_req (qualified_name_of_expr $1)
   819:     }
   820: 
   821:   | BODY code_spec { `Body_req $2 }
   822:   | HEADER code_spec { `Header_req $2 }
   823:   | PROPERTY STRING { `Property_req (snd $2) }
   824:   | PACKAGE code_spec { `Package_req $2 }
   825: 
   826: requirement_atom:
   827:   | requirement { `RREQ_atom $1 }
   828:   | LPAR requirements RPAR { $2 }
   829: 
   830: requirement_and:
   831:   | requirement_and AND requirement_atom { `RREQ_and ($1,$3) }
   832:   | requirement_atom { $1 }
   833: 
   834: requirement_or:
   835:   | requirement_or OR requirement_and { `RREQ_or ($1,$3) }
   836:   | requirement_and { $1 }
   837: 
   838: requirements:
   839:   | requirements COMMA requirement_or { `RREQ_and ($1,$3) }
   840:   | requirement_or { $1 }
   841: 
   842: requires_clause:
   843:   | REQUIRES requirements { $2 }
   844:   | { `RREQ_true }
   845: 
   846: binding_header:
   847:   | HEADER code_spec requires_clause SEMI
   848:   {
   849:       let sr = rstoken $1 $4 in
   850:       `AST_insert (sr, "_root", [], $2, `Header ,$3)
   851:   }
   852: 
   853:   | BODY code_spec requires_clause SEMI
   854:   {
   855:      let sr = rstoken $1 $4 in
   856:     `AST_insert (sr, "_root", [], $2, `Body, $3)
   857:   }
   858: 
   859:   | HEADER EQUAL code_spec requires_clause SEMI
   860:   {
   861:       let sr = rstoken $1 $5 in
   862:       `AST_insert (sr, "_root", [], $3, `Header, $4)
   863:   }
   864: 
   865:   | BODY EQUAL code_spec requires_clause SEMI
   866:   {
   867:      let sr = rstoken $1 $5 in
   868:     `AST_insert (sr, "_root", [], $3, `Body, $4)
   869:   }
   870: 
   871:   | HEADER NAME tvarlist EQUAL code_spec requires_clause SEMI
   872:   {
   873:     `AST_insert (rstoken $1 $7, snd $2, $3, $5, `Header, $6)
   874:   }
   875: 
   876:   | BODY NAME tvarlist EQUAL code_spec requires_clause SEMI
   877:   {
   878:     `AST_insert (rstoken $1 $7, snd $2, $3, $5, `Body, $6)
   879:   }
   880: 
   881:   | REQUIRES requirements SEMI
   882:   {
   883:     let sr = rstoken $1 $3 in
   884:     `AST_insert (sr, "_root", [], `Str "", `Body, $2)
   885:   }
   886: 
   887:   | NAME REQUIRES requirements SEMI
   888:   {
   889:     let sr = rstoken (fst $1) $4 in
   890:     `AST_insert (sr, snd $1, [], `Str "", `Body, $3)
   891:   }
   892: 
End data section to src/flx_parse.mly[10]