309 lines
7.0 KiB
ANTLR
309 lines
7.0 KiB
ANTLR
parser grammar zaplangParser;
|
|
|
|
options {
|
|
tokenVocab = zaplangLexer;
|
|
language = Python3;
|
|
}
|
|
|
|
// ============================================================================
|
|
// PUNTO DE ENTRADA DEL PROGRAMA
|
|
// ============================================================================
|
|
|
|
unidadTraduccion
|
|
: declaracionExterna*
|
|
;
|
|
|
|
declaracionExterna
|
|
: declaracionFuncion
|
|
| declaracionVariable
|
|
| declaracionEstruct
|
|
| declaracionEnum
|
|
;
|
|
|
|
// ============================================================================
|
|
// DECLARACIONES DE FUNCIONES
|
|
// ============================================================================
|
|
|
|
declaracionFuncion
|
|
: tipoRetorno identificadorFuncion
|
|
ParenIzq listaParametros? ParenDer
|
|
bloque
|
|
;
|
|
|
|
tipoRetorno
|
|
: especificadorTipo
|
|
| Vacio
|
|
;
|
|
|
|
identificadorFuncion
|
|
: Identificador
|
|
;
|
|
|
|
listaParametros
|
|
: declaracionParametro (Coma declaracionParametro)*
|
|
;
|
|
|
|
declaracionParametro
|
|
: especificadorTipo Identificador
|
|
| especificadorTipo Identificador CorcheteIzq ConstanteEntera CorcheteDer
|
|
;
|
|
|
|
// ============================================================================
|
|
// ESPECIFICADORES DE TIPO
|
|
// ============================================================================
|
|
|
|
especificadorTipo
|
|
: tipoBasico (CorcheteIzq ConstanteEntera? CorcheteDer)*
|
|
| tipoEstructurado (CorcheteIzq ConstanteEntera? CorcheteDer)*
|
|
;
|
|
|
|
tipoBasico
|
|
: Ent
|
|
| Doble
|
|
| Flot
|
|
| Carac
|
|
| ConFirma
|
|
| SinFirma
|
|
| puntero
|
|
;
|
|
|
|
puntero
|
|
: Estrella
|
|
| Estrella Estrella
|
|
| Estrella Estrella Estrella
|
|
;
|
|
|
|
tipoEstructurado
|
|
: Estruct Identificador
|
|
| Enum Identificador
|
|
;
|
|
|
|
// ============================================================================
|
|
// DECLARACIONES DE ESTRUCTURAS
|
|
// ============================================================================
|
|
|
|
declaracionEstruct
|
|
: Estruct Identificador LlaveIzq miembroEstruct* LlaveDer PuntoYComa
|
|
;
|
|
|
|
miembroEstruct
|
|
: especificadorTipo Identificador PuntoYComa
|
|
| especificadorTipo Identificador CorcheteIzq ConstanteEntera CorcheteDer PuntoYComa
|
|
;
|
|
|
|
// ============================================================================
|
|
// DECLARACIONES DE ENUMERACIONES
|
|
// ============================================================================
|
|
|
|
declaracionEnum
|
|
: Enum Identificador LlaveIzq listaEnumeradores LlaveDer PuntoYComa
|
|
;
|
|
|
|
listaEnumeradores
|
|
: enumerador (Coma enumerador)*
|
|
;
|
|
|
|
enumerador
|
|
: Identificador
|
|
| Identificador Asignar ConstanteEntera
|
|
;
|
|
|
|
// ============================================================================
|
|
// DECLARACIONES DE VARIABLES Y ASIGNACIONES
|
|
// ============================================================================
|
|
|
|
declaracionVariable
|
|
: especificadorTipo inicializadorVariable (Coma inicializadorVariable)* PuntoYComa
|
|
;
|
|
|
|
inicializadorVariable
|
|
: Identificador
|
|
| Identificador Asignar inicializador
|
|
| Identificador CorcheteIzq ConstanteEntera CorcheteDer
|
|
| Identificador CorcheteIzq ConstanteEntera CorcheteDer Asignar inicializadorArreglo
|
|
;
|
|
|
|
inicializador
|
|
: asignacionExpresion
|
|
;
|
|
|
|
inicializadorArreglo
|
|
: LlaveIzq listaInitializers? LlaveDer
|
|
;
|
|
|
|
listaInitializers
|
|
: asignacionExpresion (Coma asignacionExpresion)*
|
|
;
|
|
|
|
// ============================================================================
|
|
// SENTENCIAS
|
|
// ============================================================================
|
|
|
|
sentencia
|
|
: sentenciaCompuesta
|
|
| sentenciaDeclaracion
|
|
| sentenciaExpresion
|
|
| sentenciaSeleccion
|
|
| sentenciaIteracion
|
|
| sentenciaSalto
|
|
;
|
|
|
|
sentenciaCompuesta
|
|
: LlaveIzq sentencia* LlaveDer
|
|
;
|
|
|
|
sentenciaDeclaracion
|
|
: declaracionVariable
|
|
;
|
|
|
|
sentenciaExpresion
|
|
: expresion PuntoYComa
|
|
| PuntoYComa
|
|
;
|
|
|
|
sentenciaSeleccion
|
|
: Si ParenIzq expresion ParenDer sentencia
|
|
| Si ParenIzq expresion ParenDer sentencia Sino sentencia
|
|
| Caso Bul LlaveIzq casoEtiqueta* etiquetaPorDef? LlaveDer
|
|
;
|
|
|
|
casoEtiqueta
|
|
: Caso constanteExpresion DosPuntos sentencia*
|
|
;
|
|
|
|
etiquetaPorDef
|
|
: Pordef DosPuntos sentencia*
|
|
;
|
|
|
|
sentenciaIteracion
|
|
: Mientras ParenIzq expresion ParenDer sentencia
|
|
| Por ParenIzq sentenciaExpresion? PuntoYComa expresion? PuntoYComa expresion? ParenDer sentencia
|
|
;
|
|
|
|
sentenciaSalto
|
|
: Retornar expresion? PuntoYComa
|
|
| Fin PuntoYComa
|
|
| Interrup PuntoYComa
|
|
;
|
|
|
|
bloque
|
|
: LlaveIzq declaracionVariable* sentencia* LlaveDer
|
|
| sentencia
|
|
;
|
|
|
|
// ============================================================================
|
|
// EXPRESIONES
|
|
// ============================================================================
|
|
|
|
expresion
|
|
: asignacionExpresion
|
|
| expresion Coma asignacionExpresion
|
|
;
|
|
|
|
asignacionExpresion
|
|
: expresionCondicional
|
|
| expresionUnaria operadorAsignacion asignacionExpresion
|
|
;
|
|
|
|
operadorAsignacion
|
|
: Asignar
|
|
| MasAsignacion
|
|
| MenosAsignacion
|
|
| EstrellaAsignacion
|
|
| DivAsignacion
|
|
| ModAsignacion
|
|
| DesplazIzqAsignacion
|
|
| DesplazDerAsignacion
|
|
| YAsignacion
|
|
| XorAsignacion
|
|
| OAsignacion
|
|
;
|
|
|
|
expresionCondicional
|
|
: expresionLogicaO
|
|
| expresionLogicaO Pregunta expresion DosPuntos expresionCondicional
|
|
;
|
|
|
|
expresionLogicaO
|
|
: expresionLogicaY (OO expresionLogicaY)*
|
|
;
|
|
|
|
expresionLogicaY
|
|
: expresionIgualacion (YY expresionIgualacion)*
|
|
;
|
|
|
|
expresionIgualacion
|
|
: expresionRelacional ((Igual | Diferente) expresionRelacional)*
|
|
;
|
|
|
|
expresionRelacional
|
|
: expresionDesplazamiento ((MenorQue | MayorQue | MenorOIgualQue | MayorOIgualQue) expresionDesplazamiento)*
|
|
;
|
|
|
|
expresionDesplazamiento
|
|
: expresionAditiva ((DesplazIzq | DesplazDer) expresionAditiva)*
|
|
;
|
|
|
|
expresionAditiva
|
|
: expresionMultiplicativa ((Mas | Menos) expresionMultiplicativa)*
|
|
;
|
|
|
|
expresionMultiplicativa
|
|
: expresionUnaria ((Estrella | Div | Mod) expresionUnaria)*
|
|
;
|
|
|
|
expresionUnaria
|
|
: operadorUnario expresionUnaria
|
|
| expresionPostfija
|
|
;
|
|
|
|
operadorUnario
|
|
: Y
|
|
| Estrella
|
|
| Mas
|
|
| Menos
|
|
| Complemento
|
|
| Not
|
|
| MasMas
|
|
| MenosMenos
|
|
;
|
|
|
|
expresionPostfija
|
|
: expresionPrimaria
|
|
| expresionPostfija CorcheteIzq expresion CorcheteDer
|
|
| expresionPostfija ParenIzq listaArgumentos? ParenDer
|
|
| expresionPostfija Punto Identificador
|
|
| expresionPostfija Flecha Identificador
|
|
| expresionPostfija MasMas
|
|
| expresionPostfija MenosMenos
|
|
;
|
|
|
|
expresionPrimaria
|
|
: Identificador
|
|
| constanteExpresion
|
|
| CadenaLiteral
|
|
| ParenIzq expresion ParenDer
|
|
| ParenIzq especificadorTipo ParenDer expresionUnaria
|
|
;
|
|
|
|
constanteExpresion
|
|
: ConstanteEntera
|
|
| ConstanteFlotante
|
|
| ConstanteCaracteres
|
|
| Verdadero
|
|
| Falso
|
|
;
|
|
|
|
listaArgumentos
|
|
: asignacionExpresion (Coma asignacionExpresion)*
|
|
;
|
|
|
|
// ============================================================================
|
|
// REGLAS AUXILIARES
|
|
// ============================================================================
|
|
|
|
// Palabra clave utilizada para marcar puntos de entrada opcionales
|
|
marcaPunto
|
|
: Bul
|
|
;
|