FO
признанный фаворит вычислителей!
обширные инфраструктурные связи!
никакого алисаинга!
лично повлиял на стандартные обозначения в математике!
Ой как Вы ошибаетесь...
Size: a a a
FO
V
int a[5];
int* b = a[3];
FO
int a[5];
int* b = a[3];
FO
int a[5];
int* b = a[3];
V
VY
if a > b then b > c else b := d?
else-ветке можно возвращать 0, но это немного странно. Не представляю как может возникнуть желание писать что-то типаif (if a > b then b > c else b := 0) then ... else ...2) Если выбрать "сгенерировать" IR для стейтмента, то придётся игнорировать результат выражения
then-ветки (b > c)E
E
BD
AT
if a > b then b > c else b := d?
else-ветке можно возвращать 0, но это немного странно. Не представляю как может возникнуть желание писать что-то типаif (if a > b then b > c else b := 0) then ... else ...2) Если выбрать "сгенерировать" IR для стейтмента, то придётся игнорировать результат выражения
then-ветки (b > c)M
VY
VY
and tr_cond cond t f ~env =Тогда и думать об этом не надо, на фазу IR оно не пройдёт
Trace.SemanticAnalysis.tr_cond cond t f;
assert_int cond ~env;
let { ty = t_ty; _ } = tr_expr t ~env in
match f with
| None ->
ret e_dummy t_ty
| Some f ->
(* If there is a false-branch then we should
check if types of both branches match *)
let { ty = f_ty; _ } = tr_expr f ~env in
if T.(t_ty = f_ty)
then ret e_dummy t_ty
else type_error expr @@ sprintf
"different types of branch expressions: \"%s\" and \"%s\""
(T.to_string t_ty) (T.to_string f_ty)
E
AT
and tr_cond cond t f ~env =Тогда и думать об этом не надо, на фазу IR оно не пройдёт
Trace.SemanticAnalysis.tr_cond cond t f;
assert_int cond ~env;
let { ty = t_ty; _ } = tr_expr t ~env in
match f with
| None ->
ret e_dummy t_ty
| Some f ->
(* If there is a false-branch then we should
check if types of both branches match *)
let { ty = f_ty; _ } = tr_expr f ~env in
if T.(t_ty = f_ty)
then ret e_dummy t_ty
else type_error expr @@ sprintf
"different types of branch expressions: \"%s\" and \"%s\""
(T.to_string t_ty) (T.to_string f_ty)
VY
E
VY
a <rel_op> b : int и(b : B := init : B) : Bт.е. можно писать так
let x := (if a > b then b > c else c := d) in ...т.е. оно тайпчекнется (если
(c := d) : int)AT
a <rel_op> b : int и(b : B := init : B) : Bт.е. можно писать так
let x := (if a > b then b > c else c := d) in ...т.е. оно тайпчекнется (если
(c := d) : int)bool и вместо него int как в C?