Está en la página 1de 11

Universidad de Costa Rica

Escuela de Ciencias de la Computación e Informática

CI-1322 Autómatas y compiladores


Primer ciclo 2018

Grupo 02
Profesor Adrián Lara

Segunda etapa
Nombre del lenguaje: Mathison

Clarificador Generador Desarrollador Implementador

Óscar Azofeifa Benjamín Blanco Carlos Portuguez Daniel Varela

B50770 B51053 B55519 B57474


Tabla de palabras reservadas

Palabra Regex Significado

y (y|Y) Operación lógica “and”

o (o|O) Operación lógica “or”

para (p|P)(a|A)(r|R)(a|A) Estructura de control,


ciclos “for”

desde (d|D)(e|E)(s|S)(d|D)(e|E) Asignación a la variable


que se va a iterar en el
ciclo

hasta (h|H)(a|A)(s|S)(t|T)(a|A) Condición de parada


para el ciclo

avance (a|A)(v|V)(a|A)(n|N)(c|C)( Definición de cómo va a


e|E) ir cambiando la variable
que se itera

mientras (m|M)(i|I)(e|E)(n|N)(t|T)(r| Estructura de control,


R)(a|A)(s|S) ciclos “while”

hacer (h|H)(a|A)(c|C)(e|E)(r|R) Parte del código que se


ejecutará dentro de la
condición del ciclo

sive (s|S)(i|I) Estructura de control,


condicional “if”

sino (s|S)(i|I)(n|N)(o|O) Acompañamiento del si


que se refiere a lo que se
realiza en el caso
contrario

devolver (d|D)(e|E)(v|V)(o|O)(l|L)(v Finalización de una


|V)(e|E)(r|R) función, retorno del
control o el valor
esperado

proc (p|P)(r|R)(o|O)(c|C) La siguiente función no


devuelve valor alguno

clase (c|C)(l|L)(a|A)(s|S)(e|E) Definición de una clase

1
num (n|N)(u|U)(m|M) Tipo de dato para
almacenar números.
Incluye lo que en otros
lenguajes serían int,
short, long, float y double

cad (c|C)(a|A)(d|D) Tipo de dato para


almacenar cadenas de
caracteres. Incluye lo
que en otros lenguajes
serían string y char

bool (b|B)(o|O)(o|O)(l|L) Tipo de dato para


almacenar un valor
booleano

publico (p|P)(u|U)(b|B)(l|L)(i|I)(c| Indica que el acceso del


C)(o|O) siguiente objeto se logra
desde cualquier parte

privado (p|P)(r|R)(i|I)(v|V)(a|A)(d| Indica que el acceso del


D)(o|O) siguiente objeto solo se
logra dentro de la clase
en la que se definió

imprimir (i|I)(m|M)(p|P)(r|R)(i|I)(m| Sirve para mostrar en


M)(i|I)(r|R) consola la cadena de
caracteres puesta entre
paréntesis

leer (l|L)(e|E)(e|E)(r|R) Lee el valor que se


ingrese por medio del
teclado

importar (i|I)(m|M)(p|P)(o|O)(r|R)(t| Comando para importar


T)(a|A)(r|R) una librería o paquete

mod (m|M)(o|O)(d|D) Operación módulo que


encuentra el resto de una
división

intentar (i|I)(n|N)(t|T)(e|E)(n|N)(t|T Especifica un bloque de


)(a|A)(r|R) código del que se
quieren extraer
excepciones

2
atrapar (a|A)(t|T)(r|R)(a|A)(p|P)(a Acompañamiento del
|A)(r|R) intentar donde se
especifica la excepción

lanzar (l|L)(a|A)(n|N)(z|Z)(a|A)(r| Permite lanzar


R) excepciones

constante (c|C)(o|O)(n|N)(s|S)(t|T)( Declara una variable


a|A)(n|N)(t|T)(e|E) como constante, el valor
no se puede cambiar
luego

revisar (r|R)(e|E)(v|V)(i|I)(s|S)(a| Estructura de control de


A)(r|R) condicional múltiple

caso (c|C)(a|A)(s|S)(o|O) Caso de una condicional


múltiple

como (c|C)(o|O)(m|M)(o|O) Asigna un alias a otra


palabra

defecto (d|D)(e|E)(f|F)(e|E)(c|C)(t| Caso por defecto de una


T)(o|O) condicional múltiple

con (c|C)(o|O)(n|N) Indica cuál palabra va a


ser asignada por un alias

Ej:
con abrir(lata) como
abrelatas

terminar (t|T)(e|E)(r|R)(m|M)(i|I)(n| Salir o terminar una


N)(a|A)(r|R) estructura de repetición.

excepto (e|E)(x|X)(c|C)(e|E)(p|P)(t Estructura lógica que


|T)(o|O) indica qué ejecutar si se
captura una excepción.

mostrar (m|M)(o|O)(s|S)(t|T)(r|R)( Imprime en consola una


a|A)(r|R) hilera

en (e|E)(n|N) Indica en una estructura


de repetición sobre cuál
elemento iterar.

continuar (c|C)(o|O)(n|N)(t|T)(i|I)(n| Salta a la siguiente


N)(u|U)(a|A)(r|R) iteración dentro de una

3
estructura de iteración.

finalmente (F|f)(I|i)(N|n)(A|a)(L|l)(M| Estructura lógica final en


m)(E|e)(N|n)(T|t)(E|e) la captura de
excepciones.
Tabla de operadores

Operador Regex Significado

* \* Operador de
multiplicación

< < Operador “menor que”

^ \^ Operador de potencia

- - Operador de resta

> > Operador mayor

= = Operador de igualdad

<= \<\= Operador menor o igual

! ! Operador distinto

/ \/ Operador de división

>= \>\= Operador mayor o igual

== \=\= Operador de
comparación de igualdad

+ \+ Operador suma

4
Tabla de delimitadores

Delimitador Regex

( \(
) \)

-= \-=

%= %=

>>= >>=

[ \[
] \]

*= \*=

&= &=

<<= <<=

{ \{
\}
}

/= \/=

|= \|=

**= \*\*=

+= \+=

5
//= \/\/=

^= \^=

Tabla de variables

Variables ([a-z]|[A-Z]) ([a-z]|[A-Z]|_|[0-9])*

Tabla de Literale

Literales de tipo cad que contienen "([^\\"]|\\"|\\\\|\\n|\\r|\\t)*"


el caracter “

Literales de tipo numero \-?[0-9]*(\.[0-9]*)?

Literales de tipo bool (v|V)(e|E)(r|R)(d|D)(a|A)(d|D)(e|E)(r|R)(


o|¡o) | (f|F)(a|A)(l|L)(s|S)(o|O)

Tabla de Comentarios

Comentario de una línea "/*" [^*] ~"*/" | "/*" "*"+"/"

Comentario multilínea \/\/[^\r\n]*(\r|\n)?

6
Anexo

Reglas léxicas:

1. Estructura de línea

1.1 Líneas lógicas

Las líneas lógicas o comandos son determinadas por saltos de línea


convencionales, es decir, “\n”. Una línea lógica podría ser separada con puntos
suspensivos para indicar la concatenación de una o varias líneas, “...”.

“...”
1.2 Líneas físicas
Estas líneas serán indicadas por medio de saltos de línea convencional: ‘\n’.

‘\n’
1.3 Comentario de una línea
Se inicia al encontrar la sucesión de caracteres “//” y finaliza al encontrar el
carácter de salto de línea logico (‘\r\n’).

“//”- ‘\r\n’

7
1.4 Comentario de varias líneas
Se inicia al encontrar la sucesión de caracteres “/*” y finaliza al encontrar el
carácter “*/”.

“/*” - “*/”
1.5 Líneas en blanco
Se ignora una línea lógica que contiene solo caracteres de espacio ‘ ‘ o
comentarios.

1.6 Espacios en blanco


Excepto al inicio de una línea lógica, dentro de un literal de cadena o un
comentario, los caracteres de espacio, ya sea uno o varios consecutivos, son
exclusivamente utilizados para la separación de componentes léxicos.

2. Identificadores
2.1 Palabras clave
Existen nombres que se utilizan como palabras reservadas y no se pueden usar
como identificadores de variables para el programador.
Cabe recalcar que para dichas palabras puede variar entre las mayusculas y
minusculas, por ejemplo: “FoR” seguiria siendo un identificador reservado. La tabla
de palabras reservadas se muestra al inicio del documento.

2.2 Variables

8
La expresión léxica para asignarle el nombre a una variable puede solamente
contener caracteres del abecedario (tanto en minúscula como en mayúscula y
contemplando la letra “ñ”), el carácter “​_​“ y los numéricos (0-9). Cabe recalcar que
dicha expresión no puede iniciar con un número.

3. Literales

3.1 Literales numéricos (numero)


La expresión solamente puede contener caracteres numéricos y el carácter ‘.’, el
cual es representado para diferenciar los valores decimales. Cabe recalcar que si
se trata de un número real entre -1 y 1 se debe indicar explícitamente de la
siguiente forma: 0.(resto de la expresión). Por ejemplo: .20 está erróneo, lo
correcto sería 0.20.
[0-9]

3.2 Literales de cadenas (cad)


Lo que distingue este tipo es la restricción de que al inicio y final de la expresión
siempre se debe encontrar el carácter ​“​. Recalcando que el carácter de backslash
\ es utilizado cuando queremos utilizar el caracter “ dentro de la cadena, y no es el
final de la hilera.
Ahora bien, si queremos especificar una cadena que termina en backslash, como
por ejemplo “\”, debemos utilizar dos backslash par especificar este es el último en
la hilera, similar a Java. Por lo tanto, en el caso mencionado lo correcto sería: “\\”.
Además para la uttilización del backslash solamente se tomo en cuenta \n, \t y \r.
Finalmente, cabe recalcar que cada backslash dentro de una string es
representado por dos seguidas.

3.3 Literales de bool (bool)


En este caso solamente se compara con las palabras “verdadero” o “falso”,
aclarando que las minusculas y mayusculas no influye en la cotejo, como por
ejemplo: “VerdaDerO” o “vERDadero”, se tomaría como si estuviera escrito de la
misma forma, por lo tanto es valido.

9
4. Operadores
Los siguientes símbolos son operadores:

* - * /
< > <= >=
^ = ! ==

5. Delimitadores
Se usarán los siguientes delimitadores

() [] {} +=
-= *= /= //=
%= &= |= ^=
>>= <<= **=

10

También podría gustarte