Sobre SimplePASCAL

Índice de la página

  1. Breve descripción de SimplePASCAL.
  2. Gramática de SimplePASCAL.
  3. Volver a la página principal.

Breve descripción de SimplePASCAL

SimplePASCAL es una adaptación del lenguaje de programación PASCAL para esta herramienta. Su objetivo es tener las construcciones sintácticas necesarias para enseñar los conceptos de la tabla de símbolos. Por ello, se han eliminado ciertas partes, y añadido otras.

Algunas de las partes que se han eliminado son las sentencias: USE, CASE o FOR. En cuanto a los añadidos, ahora se permiten definir ámbitos anónimos. Para definir estos bloques basta con utilizar el esquema:

declaraciones BEGIN sentencias END

Índice de la página / Volver a la página principal.

Gramática de SimplePASCAL

A continuación se muestra la gramática de SimplePASCAL.

programa ::= <PROGRAM> id [ "(" id ")" ] ";" bloque "."
bloque ::= declaracion <BEGIN> sentencia ( ";" sentencia )* <END>
bloqueEjecutable ::=	( defCte | defTip | defVar)* <BEGIN> sentencia ( ";" sentencia )*  <END> 
declaracion ::= ( defCte | defTip | defVar | defSubprograma )*
defSubprograma ::= ( defProcedimiento | defFuncion )
defCte ::= <CONST> (unaConst ";")+
unaConst ::= id "=" valorSimple 
defTip ::= <TYPE> (unTipo ";")+
unTipo ::= <ID> "=" tipoEstr
tipoEstr ::= ( estrTab | estrReg )
estrTab ::= <ARRAY> "[" valorSimple ".." valorSimple "]" <OF> <ID>
estrReg ::= <RECORD> listaVar ( ";" listaVar )* <END>
defVar ::= <VAR> ( listaVar ";" )+
defProcedimiento ::= <PROCEDURE> id [ "(" stactions = parFormales ")" ] ";" bloque ";"
defFuncion ::= <FUNCTION> id [ "(" parFormales ")" ] ":" id ";" bloque ";"
parFormales ::= listaParam ( ";" listaParam )*
listaParam ::= [ <VAR> ] id ( "," id )* ":" id
listaVar ::= id( "," id )* ":" id
grupoSent ::= <BEGIN> sentencia ( ";" sentencia )* <END> 
sentencia ::= [ asignacion | condicional | ciclica | llamada | bloqueEjecutable ]
asignacion ::= id ":=" expresion 
condicional ::= <IF> expresion <THEN> sentencia [ <ELSE> sentencia ] 
ciclica ::= <WHILE> expresion <DO> sentencia 
llamada ::= id [ "(" parLlamada ")" ]
parLlamada ::= expresion ( "," expresion )*
expresion ::= exprSimple [ opRel exprSimple ]
exprSimple ::=	[ signo ] termino (opAdt termino )*
termino ::= factor ( opMul factor)* 
factor ::= ( valorSimple | nombreEval |  <NOT> factor | "(" expresion ")"	)
nombreEval ::= id [ selector ]
selector ::= "[" expresion "]" | "." <ID>
valorSimple ::= [ signo ]  <NUMERO> |  <CADENA>
opRel ::= ("<" | ">" | "<=" | ">=" | "=" | "<>")
opAdt ::= ( signo | "OR"  )
opMul ::= ("*" | "DIV" | "MOD" | "AND")
signo ::= ("+" | "-")
id ::= <ID> 
Índice de la página / Volver a la página principal.