5.16.5.21. Conditional Statements

Start data section to src/flx_parse.mly[27 /33 ] Next Prev First Last
  1894: elif_clause:
  1895:   | ELIF expr DO statement_aster
  1896:     {
  1897:       let sr = rstoken $1 $3 in
  1898:       let sr = fold_left (fun l r -> rsrange l (src_of_stmt r)) sr $4 in
  1899:       sr,$2,$4
  1900:     }
  1901:   | ELIF expr RETURN SEMI
  1902:     {
  1903:       let sr = rstoken $1 $4 in
  1904:       sr,$2,[`AST_proc_return sr]
  1905:     }
  1906: 
  1907:   | ELIF expr GOTO NAME SEMI
  1908:     {
  1909:       let sr = rstoken $1 $5 in
  1910:       sr,$2,[`AST_goto (sr,snd $4)]
  1911:     }
  1912: 
  1913: elif_clauses:
  1914:   | elif_clauses elif_clause { $2 :: $1 }
  1915:   | elif_clause { [$1] }
  1916: 
  1917: else_clause:
  1918:   | elif_clauses ELSE statement_aster
  1919:     {
  1920:       let sr = fold_left (fun l r -> rsrange l (src_of_stmt r)) (slift $2) $3 in
  1921:       fold_left (* actually a right fold cause list is reversed *)
  1922:       (fun els (sr,cond,thn) ->
  1923:         let sr = rsrange sr (fst els) in
  1924:         sr,[`AST_ifdo ( sr, cond, thn, snd els )]
  1925:       )
  1926:       (sr,$3) $1
  1927:     }
  1928:   | ELSE statement_aster
  1929:     {
  1930:       let sr = fold_left (fun l r -> rsrange l (src_of_stmt r)) (slift $1) $2 in
  1931:       sr,$2
  1932:     }
  1933:   | elif_clauses
  1934:     {
  1935:       match $1 with [] -> assert false
  1936:       | (sr,_,_) :: _ ->
  1937:       fold_left (* actually a right fold cause list is reversed *)
  1938:       (fun els (sr,cond,thn) ->
  1939:         let sr = rsrange sr (fst els) in
  1940:         sr,[`AST_ifdo ( sr, cond, thn, snd els )]
  1941:       )
  1942:       (sr,[]) $1
  1943:     }
  1944: 
  1945: ifgoto_stmt:
  1946:   | IF expr GOTO NAME SEMI
  1947:     { `AST_ifgoto (rstoken $1 $5,$2,snd $4) }
  1948: 
  1949:   | IF expr RETURN SEMI
  1950:     { `AST_ifreturn (rstoken $1 $4,$2) }
  1951: 
  1952:   | IF expr CALL expr SEMI
  1953:     {
  1954:       let isr = rstoken $1 $5 in
  1955:       match $4 with
  1956:       | `AST_apply (sr,(proc, arg)) ->
  1957:         `AST_ifdo (isr, $2,[`AST_call (sr, proc, arg)],[])
  1958: 
  1959:       | proc ->
  1960:         let u = `AST_tuple (slift $5, []) in
  1961:        `AST_ifdo (isr, $2, [`AST_call (rstoken $3 $5, proc, u)],[])
  1962:     }
  1963: 
  1964: 
  1965:   | IF expr DO statement_aster else_clause DONE SEMI
  1966:     { `AST_ifdo (rstoken $1 $6,$2,$4,snd $5) }
  1967: 
  1968:   | IF expr DO statement_aster DONE SEMI
  1969:     { `AST_ifdo (rstoken $1 $5,$2,$4,[]) }
  1970: 
  1971: /*
  1972: whilst_stmt:
  1973:    | WHILST expr DO statement_aster DONE SEMI
  1974:      { `AST_whilst (rstoken $1 $6, $2, $4) }
  1975: 
  1976:    | UNTIL expr DO statement_aster DONE SEMI
  1977:      { `AST_until (rstoken $1 $6, $2, $4) }
  1978: */
  1979: 
End data section to src/flx_parse.mly[27]