void primaria(reg_expr * reg) { /* <primaria> -> <identificador> * | CONSTANTE * | PARENIZQUIERDO <expresión> PARENDERECHO */ token tok = next_token(); switch (tok) { case ID: identificador(reg); break; case CONSTANTE: match(CONSTANTE); *reg = procesar_cte(); // #procesar_cte break; case PARENIZQUIERDO: match(PARENIZQUIERDO); expresion(reg); match(PARENDERECHO); break; default: syntax_error(tok, "PRIMARIA"); } }
/* * <primaria> → * <identificador> | * CONSTANTE #procesar_cte | * (<expresión>) */ void primaria(struct reg_expr *preg) { token tok; tok = prox_token(); switch (tok) { case ID: identificador(preg); break; case CONSTANTE: match(CONSTANTE); *preg = procesar_cte(); break; case PARENIZQUIERDO: match(PARENIZQUIERDO); expresion(preg); match(PARENDERECHO); break; default: error_sintactico(tok); return; } }