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
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>