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: