0% encontró este documento útil (0 votos)
19 vistas11 páginas

Conversión de Celsius a Fahrenheit

Este documento describe un proyecto de un lenguaje de programación llamado Lag++ diseñado por tres estudiantes para realizar conversiones de temperatura. El lenguaje utiliza operadores para indicar la temperatura de origen y destino y una expresión numérica para la temperatura a convertir. El documento especifica la estructura y componentes léxicos, sintácticos y semánticos necesarios para implementar el lenguaje.

Cargado por

Dayana Brissel
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas11 páginas

Conversión de Celsius a Fahrenheit

Este documento describe un proyecto de un lenguaje de programación llamado Lag++ diseñado por tres estudiantes para realizar conversiones de temperatura. El lenguaje utiliza operadores para indicar la temperatura de origen y destino y una expresión numérica para la temperatura a convertir. El documento especifica la estructura y componentes léxicos, sintácticos y semánticos necesarios para implementar el lenguaje.

Cargado por

Dayana Brissel
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

TECNOLÓGICO NACIONAL DE MÉXICO

Instituto Tecnológico de Lázaro Cárdenas

Instituto Tecnológico de Lázaro Cárdenas

Trabajo:
Proyecto
Materia:
Lenguajes y Autómatas 2

Integrantes:

Dayana Brissel Leal Talavera


Número de control: 14560753

Gerardo Valente Sánchez


Número de control: 14560508

Michel Amauri González Ruiz


Número de control: 14560454

Profesor:

Ing. Marcelo Alonso Mondragón

Cd. y Puerto de Lázaro Cárdenas Mich.

Av. Melchor Ocampo # 2555, Col. Cuarto Sector, C.P. 60950, Cd. Lázaro Cárdenas, Michoacán

Teléfono (753) 53 7 19 77, 53 2 10 40, 53 7 53 91, 53 7 53 92 Dirección Ext. 109, Fax. 108
e-mail: direccion@[Link] Internet: [Link].
1. Diseñar y crear un lenguaje de programación
2. Asignar un nombre al lenguaje y explicar su propósito.
Nombre: Lag++
Propósito:
El propósito de este lenguaje de programación será calcular las siguientes
conversiones de temperaturas:
Celsius a Fahrenheit
Fahrenheit a Celsius
Kelvin a Celsius
Celsius a Kelvin
Fahrenheit a Kelvin
Kelvin a Fahrenheit
3. Describir el funcionamiento del lenguaje, incluyendo una descripción
textual de los comandos a utilizar.
Este lenguaje funcionara de la siguiente manera:
Se tomarán dos operadores donde el primer operador definirá la temperatura que
se dará y el segundo a la que se hará la conversión, después se establecerá el
operando que tendrá que ir en medio de los operadores, el cual será la temperatura
que se convertirá, deberá ser un numero entero ya sea negativo o positivo.

4. Definir la estructura general de un programa para el lenguaje de


programación definido
Estructura:
Operador Operando Operador
5.- Poner ejemplos de como serian los programas usando el lenguaje de
programación.
C 12 F
Resultado = 53.6

K3F
Resultado = - 454.27
6.- Identificar las unidades de léxico utilizadas en el lenguaje
Palabras reservadas: C, F, K
NúmEnteros  D+ (D= 0-9)
7.- Elaborar el analizador léxico
Entrada:

Código del Analizador léxico (LEX).

%option noyywrap
%option yylineno
%{
#include "lagyac.h"
%}
D "-"?[0-9]
TC c|C
TF f|F
TK k|K
T [ \t]
%%
{D}+ {printf ("Numero: %s \n", yytext); [Link]=atoi(yytext); return
NUM;}
{TC} {printf ("Temperatura en Grados Celsius: %s \n",yytext);
strcpy([Link],yytext); return TC;}
{TF} {printf ("Temperatura en Grados Fagrenheit: %s \n",yytext);
strcpy([Link],yytext); return TF;}
{TK} {printf ("Temperatura en Grados Kelvin: %s \n",yytext);
strcpy([Link],yytext); return TK;}
{T}
. {printf ("Linea %d: Caracter invalido: %s \n",yylineno,yytext);}
%%
Resultado
8.- Analizador Sintáctico
Código Analizador sintáctico (YACC)

%{
extern int yylineno;
void temps(char l[], int a, char g[]);
%}
%union {
int numero;
char cadena[2];
}
%token NUM TC TF TK
%type <numero> NUM
%type <cadena> TC TF TK Y Z
%start D
%%
D:DX
;
D:X
;
X : Z NUM Y { printf("Linea %d: Sentencia Valida - %s %d %s \n",
yylineno,$1,$2,$3);
temps($1,$2,$3); }
;
X : error
;
Z : TF
| TK
| TC
;
Y : TC
| TF
| TK
;
Resultados:
Ejemplo:
9.- Analizador Semántico
Código Analizador Semántico (LEX)
%option noyywrap
%option yylineno
%{
#include "lagyac.h"
%}
D "-"?[0-9]
TC c|C
TF f|F
Código Analizador Semántico (LEX)
TK k|K
T [ \t]
%%
{D}+ { [Link]=atoi(yytext); return NUM;}
{TC} { strcpy([Link],yytext); return TC;}
{TF} { strcpy([Link],yytext); return TF;}
{TK} { strcpy([Link],yytext); return TK;}
{T}
. {printf ("Linea %d: Caracter invalido: %s \n",yylineno,yytext);}
%%
Codigo Analizador Semántico (YACC)

%{
extern int yylineno;
void temps(char l[], int a, char g[]);
%}
%union {
int numero;
char cadena[2];
}
%token NUM TC TF TK
%type <numero> NUM
%type <cadena> TC TF TK Y Z
%start D
%%
D:DX
;
D:X
;
X : Z NUM Y { printf("Linea %d: Sentencia Valida - %s %d %s \n", yylineno,$1,$2,$3);
temps($1,$2,$3); }
;
X : error
;
Z : TF
| TK
| TC
;
Y : TC
| TF
| TK
;

%%
main ()
{
yyparse();
}
yyerror(char *s)
{
printf("Linea %d: Error de sintaxis(%s) \n",yylineno,s);
}
void temps(char l[], int a, char g[])
{
float temp=0;
if ( (strcmp("c",l)==0) && (strcmp("k",g)==0) ) {
temp = a + 273.15;
printf("%d Celcius equivale a %.2f Kelvins \n",a,temp);
}
if ( (strcmp("k",l)==0) && (strcmp("c",g)==0) ) {
temp = a - 273.15;
printf("%d Kelvins equivale a %.2f Celcius \n",a,temp);
}
if ( (strcmp("f",l)==0) && (strcmp("c",g)==0) ) {
temp = (a - 32) * 0.5555;
printf("%d Fahrenheits equivale a %.2f Celcius \n",a,temp);
}
if ( (strcmp("c",l)==0) && (strcmp("f",g)==0) ) {
temp = (a * 0.5555) + 32;
printf("%d Celcius equivale a %.2f Fahrenheits \n",a,temp);
}
if ( (strcmp("k",l)==0) && (strcmp("f",g)==0) ) {
temp = (0.5555 * (a - 273.15)) + 32;
printf("%d Kelvins equivale a %.2f Fahrenheits \n",a,temp);
}
if ( (strcmp("f",l)==0) && (strcmp("k",g)==0) ) {
temp = (0.5555 * (a - 32)) + 273.15;
printf("%d Fahrenheits equivale a %.2f Kelvins \n",a,temp);
}
}
Ejemplo
Archivo Generado (.h)

#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype {
NUM = 258,
TC = 259,
TF = 260,
TK = 261
};
#endif

#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED


typedef union YYSTYPE
{
#line 5 "lagyac.y"

int numero;
char cadena[2];

#line 65 "lagyac.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE
# define YYSTYPE_IS_DECLARED 1
#endif

extern YYSTYPE yylval;

También podría gustarte