Creo que, al igual que yacc, los tokens se almacenan en las variables correspondientes a los símbolos en su regla de gramática. Aquí ya que hay un símbolo (error), puede simplemente generar $ 1 usando printf
, etc.
Editar: responder al comentario.
¿Por qué utiliza un terminal de error? Estoy leyendo un tutorial ocamlyacc que dice que se llama a una rutina especial de manejo de errores cuando ocurre un error de análisis. De este modo:
3.1.5. The Error Reporting Routine
When ther parser function detects a syntax error, it calls a function named parse_error
with the string "syntax error" as argument. The default parse_error
function does nothing and returns, thus initiating error recovery (see Error Recovery). The user can define a customized parse_error function in the header section of the grammar file such as:
let parse_error s = (* Called by the parser function on error *)
print_endline s;
flush stdout
Bueno, parece que sólo recibe "error de sintaxis" con esa función sin embargo. Estén atentos para más información.
Gran respuesta. Sin embargo, tengo una pregunta: ¿por qué tenemos que usar 'lexbuf.Lexing.lex_curr_p' en lugar de' lexbuf.lex_curr_p'? – GiantSquid
Porque 'lex_curr_p' pertenece al módulo' Lexing'. O ábralo o espere hasta que OCaml se vuelva más inteligente y comprenda referencias de campo de registro no calificadas. – ygrek
¿Dónde encuentras Sql_lexer? y error? –