JavaCUP - Sintaxis JavaCUP: Generalidades
Sintaxis para la especificación de gramáticas CUP
Para generar un parser para un lenguaje determinado, CUP necesita tener como entrada la especificación de dicho lenguaje. La especificación se define por medio de una serie de cláusulas que inicializan algunos parámetros del parser, los tokens del lenguaje, declaración de terminales y no terminales, y por último la sintaxis del lenguaje, siempre siguiendo una convención sintáctica que a su vez se define por medio de una gramática.
A continuación se define la gramática, llámese G, que genera el lenguaje de las especificaciones de gramáticas que pueden ser procesadas por CUP para generar parsers para dichas gramáticas:
G = <T,NT,S,P>
donde
T = {t|t es un símbolo terminal} = { code; action; parser; terminal; non; nonterminal; init; scan; with; start; precedence; left; right; nonassoc; import; package }
NT = {nt|nt es un símbolo no terminal} = {java_cup_spec; package_spec; import_list; import_spec; code_part; code_parts; action_code_part; parser_code_part; init_code; scan_code; symbol_list; symbol; term_name_list; non_term_name_list; declares_term; declares_non_term; precedence_list; precedence_l; preced; terminal_list; start_spec; production_list; production; rhs_list; rhs; prod_part_list; prod_part; opt_label; multipart_id; import_id; type_id; terminal_id; term_id; new_term_id; new_non_term_id; nt_id; symbol_id; label_id; opt_semi}
S = símbolo inicial = java_cup_spec
Ejemplos
A continuación, se encuentran dos especificaciones, a modo de ejemplo, para la identificación de cada una de las partes de la especificación.
Especificación del lenguaje ({})+
Especificación del lenguaje de las expresiones aritméticas naturales con adición y producto