usando intensivamente la pila ( que es mas facil para el compilador) seria algo asi como
push word [ dir_de_algo ] ; suponiendo que algo es un word
push 1
pop ax
pop bx
cmp ax,bx
je .l0000011 ; el label lo genera el compilador asi que el nombre es medio extraño
//hacer otra cosa
jmp .l0000012
.l0000011:
//hacer algo
.l0000012:
// aca sigue el codifo despues del else
es algo asi mi cerebro no es un compilador tan groso como GCC
el proceso del compilador para generarlo seria algo asi como:
lee la primera linea, la divide en tokens
lee el primer token ( if ) entonces llama a la funcion que parsea el if
la funcion espera un parentesis
llama a la funcion que parsea expresiones booleanas ( && || que son las de mas alta precedencia) empuja la primera variable a la pila
encuentra u operador
no lo conoce llama a la funcion que maneja la segunda precedencia mas alta ( == < , > , <= etc )
encuentra el == prende un flag para acordarse de que es una operacion de igual
empuja el segundo termino en la pila
encuentra el ")" no lo conoce
procesa la expresion ( cmp ) y vuelve al manejador de && ||
encuentra el ")" vuelve para arriba al if que si conoce el ")"
espera un retorno de carro
espera una sentencia o un {
encuentra un {
espera una expresion
llama al parser de expresiones por cada expresion que encuentre hasta un }
encuentra un else
espera un if o un {
encuentra un {
espera una expresion
llama al parser de expresiones por cada expresion que encuentre hasta un }
ya esta
me encanta el tema de compiladores, no se si fui muy claro