decl: '\n' | TOKEN typedecl symlist '\n' | ASSOC typedecl symlist '\n' | START ident '\n' | HEADCODE '\n' | UNION CODE '\n' | TYPE typedecl identlist '\n' | EXPECT NUMBER '\n' typedecl: # empty | '<' IDENT '>'
El terminal START se corresponde con una declaración
%start
indicando cual es el símbolo de arranque de la gramática.
Por defecto, el símbolo de arranque es el primero de la gramática.
El terminal ASSOC
está por los terminales que indican
precedencia y asociatividad.
Esto se ve claro si se analiza el contenido del fichero
YappParse.yp
()
en el que se puede encontrar
el código del analizador léxico del módulo
Parse::Yapp
.
El código dice:
... if($lexlevel == 0) {# In head section $$input=~/\G%(left|right|nonassoc)/gc and return('ASSOC',[ uc($1), $lineno[0] ]); $$input=~/\G%(start)/gc and return('START',[ undef, $lineno[0] ]); $$input=~/\G%(expect)/gc and return('EXPECT',[ undef, $lineno[0] ]); $$input=~/\G%{/gc ...La variable
$lexlevel
indica en que sección nos encontramos:
cabecera, cuerpo o cola. El terminal EXPECT
indica la presencia de una declaración %expect
en el fuente,
la cual cuando es seguida de un número indica el numero de
conflictos shift-reduce que cabe esperar. Use EXPECT
si quiere silenciar las advertencias de yapp
sobre la presencia
de conflictos cuya resolución automática considere correcta.