PRIMER COMMIT
This commit is contained in:
308
zaplangParser.g4
Normal file
308
zaplangParser.g4
Normal file
@@ -0,0 +1,308 @@
|
||||
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
|
||||
;
|
||||
Reference in New Issue
Block a user