https://github.com/ggomez0/compilador
Compilador con analisis Lexico y sintactico
https://github.com/ggomez0/compilador
lexer parser plx
Last synced: about 1 year ago
JSON representation
Compilador con analisis Lexico y sintactico
- Host: GitHub
- URL: https://github.com/ggomez0/compilador
- Owner: ggomez0
- Created: 2024-11-24T02:27:23.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-15T18:07:26.000Z (over 1 year ago)
- Last Synced: 2025-04-04T19:28:21.813Z (about 1 year ago)
- Topics: lexer, parser, plx
- Language: Python
- Homepage: https://compilador.ggomez.tech/
- Size: 36.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Estructura del Lenguaje
### Principio y Fin
El programa comienza con la palabra reservada `EMPEZAR` y termina con `TERMINAR`.
### Carácter de Fin de Línea
Cada línea de este lenguaje finaliza con el carácter `.`
### Librerías Externas
Este lenguaje permite incluir librerías externas. Se deben definir al inicio del archivo siguiendo la estructura:
```
extend("nombreDeLibreria.Extension")
```
Se pueden incluir varias librerías separadas por `;`.
### Tipos de Datos Admitidos
Solo se admiten los siguientes tipos de datos:
- **entero** (`int`)
- **texto** (`String`)
- **decimal** (`float`)
- **lógico** (`bool`)
### Definir Variables
Para definir variables se utiliza la estructura:
```
DEF tipo1 nombre1 := valor1
```
Donde `tipo` puede ser alguno de los tipos admitidos.
### Asignación de Valores
Para asignar valores a una variable se utiliza el símbolo `:=` seguido por una variable o un valor de alguno de los tipos admitidos.
### Funciones y Procedimientos
- Las funciones tienen la forma:
```
nombre(tipo1 arg1; tipo2 arg2; …; tipon argn) retorno.
```
- En el caso de los procedimientos:
```
nombre(tipo1 arg1; tipo2 arg2; …; tipon argn).
```
- El procedimiento que se utiliza para definir los pines es:
```
DEF PIN(tipo:número)
```
Donde `numero` indica el PIN que se va a utilizar y `tipo` puede ser:
- `PINOU`: salida
- `PININ`: entrada
### Comentarios
- Los comentarios de línea se inician con `/*`.
- Los comentarios de bloque se encierran entre `//*` y `*//`.
### Estructuras de Control
Este lenguaje admite las siguientes estructuras de control:
- **Condicional IF**:
- `IF (condición) {}`
- `IF (condición) {} ELSE {}`
- **Bucle WHILE**:
- `WHILE (condición) {}`
### Palabras Reservadas y Funciones Predefinidas
Las palabras reservadas deben escribirse en **MAYÚSCULAS**. Además de las palabras mencionadas anteriormente, otras palabras reservadas son:
- **ADEL()**: El robot avanza.
- **ATR()**: El robot retrocede.
- **IZQ()**: El robot gira en sentido antihorario.
- **DER()**: El robot gira en sentido horario.
- **ESP(tiempo)**: El robot espera un tiempo determinado.
- **FREN()**: El robot se detiene.
## Ejemplo
## Pseudocódigo (lengFuente.txt)
```txt
EMPEZAR
extend("nombreDeLibreria.Extension;servo.h").
DEF entero MD1.
DEF entero MD2:=3./*INICIO DE LA SECCION SETUP
DEF PIN(PININ:MD1).
DEF PIN(PINOU:MD2).
/*FIN DE LA SECCION LOOP
ADEL().
ESP(10).
IZQ().
FREN().
TERMINAR
```
## Resultado (Salida.ino)
```cpp
#include
#include
int MD1;
int MD2 = 3;
void setup() {
pinMode(MD1, INPUT);
pinMode(MD2, OUTPUT);
}
void loop() {
avanzar();
esperar(10);
giro_izquierda();
parar();
}
```