Programación básica

Informática. Análisis léxico. Tokens. Lexema. Patrón. Análisis sintáctico. Análisis semántico. Generación de código. Estrucutras de lenguajes. Compiladores. Intérprete. Procesador. Ensamblador. Ecuaciones

  • Enviado por: Donatelo
  • Idioma: castellano
  • País: Venezuela Venezuela
  • 31 páginas
publicidad

Análisis Léxico: Es la primera fase de un compilador. Su función principal consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis.(Compara si están dentro del Lenguaje)

Como el analizador léxico es la parte del compilador que lee el texto fuente puede realizar ciertas funciones secundarias en la interfaz del usuario, como eliminar del programa fuente comentarios y espacios en blanco en forma de caracteres de espacio en blanco, caracteres de tabulación y de nueva línea. Otra función es relacionar los mensajes de error del compilador con el programa fuente.

Términos utilizados en el Análisis Léxico:

  • Tokens: es un componente léxico.

  • Lexema: es la cadena de caracteres.

  • Patrón: es la regla que define al lexema.

  • Cadenas: es una secuencia finita de símbolos tomados de un alfabeto.

  • Lenguaje: conjunto de cadenas de un alfabeto fijo, basados en un patrón.

Análisis Sintáctico:

Ordena los tokens válido, es decir determina si la cadena de componentes léxicos violan las reglas de sintaxis. De ser asi existe un error

ANÁLISIS SEMÁNTICO

El análisis semántico es posterior al sintáctico y mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.

GENERACIÓN DE CÓDIGO

representación intermedia explícita del programa fuente.

Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.

se da el proceso de generación de código para obtener el programa objeto

Optimación de código

La fase de optimación de código trata de mejorar el código intermedio de modo que resulte un código de máquina más rápido de ejecutar.

Ejemplo de compilación

POSICION = INICIAL + (VELOCIDAD * 60)

ID1 = ID2 + (ID3 * 60)

=

ID1 +

ID2 *

ID3 60

=

ID1 +

ID2 *

ID3 ENTAREAL

60

TMP1=ENTAREAL (60)

TMP2=ID3*TMP1

TMP3=ID2+TMP2

ID1=TMP3

TMP1=ID3 * 60.0

ID1 = ID2+TMP1

MOVF ID3,R2

MULF #60.0,R2

MOVF ID2,R1

ADDF R2,R1

MOVF R1,ID1

Análisis Léxico: Devuelve la secuencia de tokens, es decir los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje.

Análisis Sintáctico: Orden de los tokens válido, es decir la cadena de componentes léxicos violan las reglas de estructura (sintaxis).

Análisis Semántico: Tipo de variables asignadas incorrecta, es decir intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.

ESTRUCTURAS DE LENGUAJES Y COMPILADORES (UNIDAD I)

Profesora: Ing. Brendys Galvis

Programa: Es el conjunto de instrucciones que permiten ejecutar un proceso.

Algoritmo: Conjunto de pasos con secuencia lógica.

Diagrama de Flujo: Representación gráfica de un algoritmo.

Pseudocódigo: Explicación del diagrama de flujo en un lenguaje universal.

Programa Fuente: Entrada al proceso de compilación hecho por el programador, líneas de código.

Programa Objeto: Entendido por la máquina después de una transformación.

Compilador: Es un programa que traduce el programa o lenguaje fuente a lenguaje objeto, cuya finalidad es la detección de errores a través de la verificación con la tabla de símbolos

Compilador Vs. Intérprete

Compilador

Intérprete

- Se compila una vez .

- Se ejecuta n veces.

- En bucles, el compilador genera código equivalente al bucle.

- Traduce tantas veces una línea como veces se repite el bucle.

- Tienen una visión global del programa, por lo que la detección de errores es más detallada.

- Va línea por línea por que la detección de errores no es confiable.

- Utiliza más memoria.

- Utiliza menos memoria.

- Predominan actualmente.

- No predominan actualmente a excepción del utilizado por los navegadores de Internet para interpretar el código JVM (Java Virtual Machine) de Java.

Fases del Compilador:

Programa Fuente

Análisis Léxico

Análisis Sintáctico

Análisis Semántico

Generador de Código Intermedio

Generador de Código

Optimizador de Código

Programa Objeto

El Compilador tiene 8 fases: 6 seguidas y 2 paralelas, asimismo, tiene 2 etapas.

Fases Seguidas: Análisis Léxico, Sintáctico, Semántico, Generador de Código Intermedio, Generador de Código, Optimizador de Código.

Fases Paralelas: Se dan a lo largo de todas las fases: Detección de Errores y Verificación en la Tabla de Símbolos:

Las 2 Etapas:

Análisis: es el proceso de descomposición del programa fuente en sus elementos más pequeños hasta llegar a la representación intermedia (árbol sintáctico). Va de lo general a lo específico.

Síntesis: va a partir de la representación intermedia cuando se da el proceso de generación de código para obtener el programa objeto. Va de lo específico a lo general.

Sistema para el Procesamiento de un Lenguaje

Estructura del Programa Fuente

Preprocesador

Programa Fuente

Compilador

Programa Objeto en Lenguaje Ensamblador

Ensamblador

Código de Máquina Relocalizable

Cargador

Código de Máquina Absoluto

Preprocesador: Es un programa que examina las instrucciones en el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer; incluye instrucciones, estructuras o declaraciones escritas en otro lenguaje, dando por resultado la modificación del programa fuente. Se ejecuta antes de llamar al compilador por ello también se le llama precompilador.

Funciones:

  • Procesamiento de Macros.

  • Inclusión de Archivos de encabezado.

  • Posee lenguaje propio.

  • Posee su propia tabla de símbolos.

  • Omite comentarios y elimina espacios en blanco.

  • Es el editor del programa.

  • Comprueba instrucciones lógicas (verdaderas y falsas).

  • Entrada: Programa fuente

  • Salida: Programa fuente optimizado.

Ensamblador: es un programa que genera código máquina a partir de mnemónicos donde se usan nombres en lugar de código binario para operaciones, y también se usa nombres para las direcciones de memoria.

Funciones:

  • Calcula y diseña los espacios de memoria.

  • Trabaja con 2 operandos y un operador.

  • Se ejecuta de forma paralela al compilador en la fase de generación de código intermedio.

Mnemónicos: en computación, simbología que busca la asociación mental para hacer fácil de recordar al momento de programar.

Cargadores: programa que copia un programa para su ejecución.

Funciones:

  • Administra la memoria.

  • Enlaza todos los programas y crea uno solo.

  • Realiza dos funciones principales: carga y edición de enlaces.

  • Carga una cadena de bytes en la memoria.

  • Verifica cada byte para su transmisión correcta.

  • Verifica cada palabra para ver si es una instrucción valida.

  • Convierte las direcciones relocalizables en direcciones absolutas.

  • Sastisface todas las referencias y etiquetas externas.

  • Genera una tabla de símbolos externa.

  • Carga, reubica y enlaza en memoria.

  • Se ejecuta en forma paralela al compilador en la fase de optimizador de código.

Tipos de Compiladores:

Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.

Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.

Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.

Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.

Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux.

Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.

Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.

Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje.

Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.

Herramientas que manipulan Programa Fuente

  • Editores de Estructura: Toman como entrada una secuencia de órdenes para construir un programa fuente. Este tipo de editor crea y efectúa cualquier otra operación de mantenimiento. Además de imprimirle una estructura jerárquica del programa. Ej.: Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.).

  • Impresoras Estéticas: Analizan el programa fuente de manera que resulte claramente visible. Ej.: Word, Excel, Power Point, Photoshop, etc.

  • Verificadores Estáticos: Leen el programa fuente, lo analizan e intentan descubrir errores potenciales sin ejecutarlos. Ej.: Editores de C y Pascal.

  • Intérpretes: No producen programa fuente, pero efectúan operaciones que lo implican, sólo construyen la representación intermedia (árbol sintáctico) y pueden efectuar operaciones sobre los nodos. No pueden generar código (.exe).

Herramientas para la Construcción de Compiladores (Proyecto).

Análisis Léxico:

Entrada: Programa Fuente:

Salida: Componentes Léxicos Clasificados

Proceso: 1. Omitir los comentarios.

2. Eliminar los espacios en blanco.

3. Comparar los token con la tabla de símbolos.

4. Clasificar los componentes léxicos.

Token = 1 carácter.

Errores en el Análisis Léxico:

  • Token no definido en la tabla de símbolos.

Ejemplo del Análisis Léxico:

(JH*UR)^OR + [MS+190 (16+FT=16F+4F+JF*UX

Aunque en esta expresión se aprecian errores, estos son errores sintácticos, de los cuales se ocupará el próximo nivel del compilador.

El análisis léxico procederá:

1. Calcular la longitud de la cadena original (42 caracteres con espacios en blanco)

2. Eliminar los espacios en blanco:

Comparar <> Espacios en blanco

Concatenar

Var = Medida(cadena) con un for i=1 to longitud de la cadena.

3. Forma la nueva cadena sin espacios (JH*UR)^OR+[MS+190(16+FT=16F+4F+JF*UX

4. Calcula la nueva cadena (37 caracteres sin espacios en blanco)

5. Compara en tabla de símbolos y clasifica

If caracter = VAR

If caracter = NUM

If caracter = OPERAD

If caracter = SEPARAD

Sino es ninguno de los anteriores:

ERROR: El token “ ” no está definido en la tabla de símbolos

La Tabla de Símbolos está formada por:

VARIABLES: Desde la A a la Z

NUMEROS: Desde el 0 al 9

OPERADORES: = + - * / ^

SEPARADORES: {[()]}

Tabla Clasificadora de los Componentes Léxicos: Ejemplo:

(JH*UR)^OR+[MS+190(16+FT=16F+4F+JF*UX

VARIABLES

NUMEROS

OPERADORES

SEPARADORES

J

1

*

(

H

9

^

)

U

0

+

[

R

1

+

(

O

6

+

R

1

=

M

6

+

S

4

+

F

*

T

F

F

J

F

U

X

Análisis Sintáctico:

Entrada: Componentes Léxicos Clasificados

Salida: Árbol Sintáctico

Proceso: 1. Determinar el tipo de Análisis:

Descendente: va de Izquierda a Derecha y de Arriba a Abajo y se construye el árbol sintáctico.

Ascendente: va de Derecha a Izquierda y de Abajo a Arriba, evalúa y genera un G.D.A. (Grafo Dirigido Acíclico).

=

+

-

*

/

^

{[()]}

2. Determinar Reglas y Patrones:

Las Variables: Longitud Máxima = 4 caracteres (ABRP)

Longitud Mínima = 2 caracteres (DT)

Tipo Alfanumérica deben iniciar por letra (A14A)

Los Números: Enteros

Positivos

Longitud Indefinida

3. Formar palabras según patrón.

4. Clasificar las palabras.

5. Establecer jerarquía de Operadores.

6. Construir el Árbol Sintáctico.

Para formar palabras:

VARIABLE: "4"2 (Longitud)

NUMERO: Enteros y Positivos

Extraer y Leer caracter

If caracter = VARIABLE

Leer el siguiente caracter

If caracter =VARIABLE

Concatenar

Leer el siguiente caracter (concatenar sólo hasta donde

es permitido la longitud de las variables, pues si es mayor a 4 es un error).

If caracter = NUMERO

Concatenar

Leer el siguiente caracter mientras sea numero

If caracter = OPERADOR o SEPARADOR

Fin de la concatenación

Clasificar la variable o el numero

Clasificar el operador o separador

Errores Sintácticos:

  • Longitud de Variable no permitida.

  • Tipo de número.

  • Duplicidad de operador.

  • Se esperaba operador.

  • Falta signo “=”

  • Sólo debe existir un “=”

  • Falta separador (Nº de separadores abiertos = Nº de separadores cerrados).

  • Entre otros que surgirán a medida que se va desarrollando el compilador.

En este caso el ejemplo utilizado para el análisis léxico no pasaría del análisis sintáctico pues presenta muchos errores de este tipo.

Un ejemplo de una expresión sin errores sintácticos:

27*SF/(RT+30)^28-AB+(QR+NR/FX)=MX+HB-AB/(27*SF)^NR/FX*(QR+NR)

Arreglo una cadena de caracter

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

void main()

{

char c1[20],c2[20];

system("cls");

printf("\t\tPROGRAMA QUE LEE DOS CADENAS DE CARACTERES");

printf("\n\n introduzca la primera cadena");

gets(c1);

printf("\n\n introduzca la segunda cadena");

gets(c2);

printf("\nla longitud dela primera cadena es: %d",strlen(c1));

printf("\nla longitud dela segunda cadena es: %d",strlen(c2));

if (strcmp(c1,c2)==0)

{

printf("\n las cadenas son iguales");

}

else

{

printf("\n las cadenas son diferentes");

}

printf("\n\n" );

getch();

}

Ejercicio dada una cadena de carácter elimina los espacios

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void main () {

char arreglo[500];

int c_caract,cont,e,espacios;

printf("Escriba una Cadena de Caracteres Menor a 20 Caracteres\n\n");

fflush(stdin);

gets(arreglo);

c_caract=strlen(arreglo);

cont=c_caract;

espacios=cont;

while(cont>=0)

{

if((arreglo[cont] == ' ') ||(arreglo[cont]=='\t'))

{

c_caract=c_caract-1;

for(cont;cont<=c_caract;cont++)

arreglo[cont]=arreglo[cont+1];

}

cont=cont-1;

}

for (e= c_caract+1; e<=16; e++)

arreglo[e]=NULL;

printf("\n\n\nLA CADENA QUEDO ORGANIZADA ASI\n%s \n", arreglo);

printf("\n\nSe eliminaron %i Espacios",espacios-c_caract);

printf("\n\n\nla Cadena Tiene %i Caracteres\n\n\n\n\n",c_caract);

}

Ecuación de Segundo Grado

#include <stdio.h>

#include <cmath.h>

main()

{

float a,b,c,d,x,y;

printf ("ingrese a: ");

scanf ("%f,&a");

printf ("ingrese b: ");

scanf ("%f,&b");

printf ("ingrese c: ");

scanf ("%f,&c");

if (a == 0)

printf ("no cumple la condicion. ");

else

{

d = (b*b) - (4*a*c);

x= ((-b) + sqrt(d))/(2*a);

y= ((-b) - sqrt(d))/(2*a);

}

printf (" el resultado para x es: %f", x /n);

printf (" el resultado para y es: %f", y /n);

}

};

--------------------------------------------------------------

#include<stdio.h>

main()

{

int i,numero1,numero2;

printf("\introduzca primer numero");

scanf("%i",&numero1);

printf("\introduzca segundo numero");

scanf("%i",&numero2);

for(i=1;i<=1;i++)

{

if(numero1>numero2)

printf("el mayor es el primer %i",numero1);

else

{

printf("el mayor es el segundo numero %i",numero2);

}

}

}

------------------------

#include<stdio.h>

main()

{float c,f;

printf("ingrece el valor de f");

scanf("%f",&f);

c=(f-32)*5/9;

printf("el valor en centigrado es=>%f",c);

return 0;}

Insertar un elemento en la pila

#include<stdio.h>

#include<conio.h>

int main()

{

int tamaño pila,tope,opciòn,elemento,espacios vacios,recorrido;

char pila [25],si_no [1]

tamaño pila=25

while(opcion!==6)

{

sclrcr ()

printf ("/n sistema de actualizacion de pilas/n");

printf ("/n); printf ("menu de opciones/n");

printf ("1 insertar un elemento/n");

printf ("2 consultar un elemento/n");

printf ("3 eliminar un elemento/n");

printf ("4 consultar estado de pila/n");

printf ("5 tamaño de la pila/n");

printf ("6 salir del sistema/n");

printf ("/n ingrese su opcion/n");

scanf ("%i",&opcion); sclrcr ()

si_no='s'.

while (opcion==1&& si_no=='s')

{ if tope ==tamañopila

{ printf ("/n pila en el tope .no puede insertar/n");

si_no='n'.

else

{ tope=tope+1

printf ("introdusca el elemento a insertar");

scanf("%c",&elemento);

pila [tope]=elemento;

printf ("ya esta cargado.insertar otro? s/n");

scanf (("%c,&si_no);

}

}

si_no='s'

while ((opcion==2)&& (si_no='s'))

{

clrscr();optar=0 recorrido=0

printf ("cual posicion suiche consultar?(pulse"0" para ver todos),&");

scanf("%c,&optar);

while optar=0 && recorrido<tamaño tabla

{

recorrido==recorrido+1

printf ("posicion pila n.%i:%i/n",recorrido,pila [recorrido]);

}

if optar>0

{ clrscr ()

printf("la posicion %i/n",optar,pila[optar]);

}

printf ("/n desender otra opcion? s/n:");

scanf("%c",&si_no)

}

si_no='s'

while ((opcion==3&&(si_no='s'));

{ if tope==0

{

printf ("pila vacia.no puede eliminar");

}

si_no='n'

else

{ pila [tope]="b";

tope=tope-1;

printf("/n desea eliminar otro ? s/n);

scanf("%c",&si_no);

}

if opcion=4

{ clrscr();

espaciosvacios=tamaño pila-tope

print ( "/n/n el tope de la pila esta en %i,por tanto,quedan%i espacios vacios en la pila/n"),tope

}

if opcion=5

{ clrscr

print(" el tamaño de la pila es de %i/n",tamaño pila)

}

getch ()

}

}

Cual numero es par cual es impar

#include<stdio.h>

main()

{

int N,i=0,r,d=0,e=0,f,g;

int par[20],impar[20],entrada[20];

printf("\nIntroduzca el numero de datos:\t");

scanf("%d",&N);

for(i=0;i<N;i++)

{

printf("Ingrese dato %d:\t",i+1);

scanf("%d",&entrada[i]);

r=entrada[i] % 2;

if(r==0)

{

par[d]=entrada[i];

f=d;

d++;

}

else

{

impar[e]=entrada[i];

g=e;

e++;

}

}

printf("\n");

printf(" Pares\n");

printf("\n");

for(d=0;d<=f;d++)

{

printf("\t%d\n",par[d]);

}

printf("\n");

printf(" Impares\n");

printf("\n");

for(e=0;e<=g;e++)

{

printf("\t%d\n",impar[e]);

}

printf("\n");

}

Volumen, Factura ,Pasaporte

#include<stdio.h>

float ladoa,ladob,area;

main()

{

printf("ingrese el valor de ladoa");

scanf("%f",&ladoa);

printf("ingrese el valor de ladob");

scanf("%f",&ladob);

area=ladoa*ladob;

printf("el area del rectangulo es: %f\n",area);

}

-------------------------------------------------

FACTURA

#include<stdio.h>

#include<conio.h>

int main()

{

int cliente, nombre,descripcion,codigopro, cedula, fecha, nif, rif, factura, punitario, ptotal, cantidad, precioiva, opcion, pcompra;

do

{

printf("FACTURACION DE LA LIBRERIA UNIOJEDA.\n\n");

printf("1.Facturacion para un cliente. \n");

printf("2.Facturacion para una empresa. \n");

printf("3.Salir del Sistema. \n");

scanf("%i",&opcion);

switch(opcion)

{

case 1:

printf("Introducir la fecha en este formato dia/mes/año:\n\n");

scanf("%i",&fecha);

printf("Introducir nombre del cliente: \n\n");

scanf("%i",&cliente);

printf("Introducir la cedula del cliente: \n\n");

scanf("%i",&cedula);

printf("Introducir el codigo del articulo: \n\n");

scanf("%i",&codigopro);

printf("Introducir el nombre del articulo: \n\n");

scanf("%i",&descripcion);

printf("Introducir el precio del articulo: \n\n");

scanf("%i",&punitario);

printf("Introducir la cantidad de articulos: \n\n");

scanf("%i",&cantidad);

ptotal = (cantidad * punitario);

precioiva = (ptotal * (0.16));

pcompra = ptotal+precioiva;

factura = factura + 1;

printf("\n\nFecha: %i\n",fecha);

printf("Factura N°: %i\n",factura);

printf("Nombre: %i\n",cliente);

printf("Cedula: %i\n",cedula);

printf("Codigo del art: %i\n",codigopro);

printf("Nombre del Producto: %i\n",descripcion);

printf("Precio del Producto: %i\n",punitario);

printf("Cantidad de Articulos: %i\n",cantidad);

printf("TOTAL: %i\n",ptotal);

printf("IVA: %i\n",precioiva);

printf("El total de su compra es de: %i\n",pcompra);

printf("¡¡GRACIAS POR SU COMPRA!!");

printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");

getch();

break;

case 2:

printf("Introducir la fecha en este formato dia/mes/año:\n\n");

scanf("%i",&fecha);

printf("Introducir el nombre de la empresa: \n\n");

scanf("%i",&nombre);

printf("Introducir el nif de la empresa: \n\n");

scanf("%i",&nif);

printf("Introducir el rif de la empresa: \n\n");

scanf("%i",&rif);

printf("Introducir el codigo del articulo: \n\n");

scanf("%i",&codigopro);

printf("Introducir el nombre del articulo: \n\n");

scanf("%i",&descripcion);

printf("Introducir el precio del articulo: \n\n");

scanf("%i",&punitario);

printf("Introducir la cantidad de articulos: \n\n");

scanf("%i",&cantidad);

ptotal = (cantidad * punitario);

precioiva = (ptotal * (0.16));

pcompra = ptotal+precioiva;

factura = factura + 1;

printf("\n\nFecha: %i\n",fecha);

printf("Factura N°: %i\n",factura);

printf("Nombre de la Empresa: %i\n",nombre);

printf("Nif: %i\n", nif);

printf("Rif: %i\n", rif);

printf("Codigo del art: %i\n",codigopro);

printf("Nombre del Producto: %i\n",descripcion);

printf("Precio del Producto: %i\n",punitario);

printf("Cantidad de Articulos: %i\n",cantidad);

printf("TOTAL: %i\n",ptotal);

printf("IVA: %i\n",precioiva);

printf("El total de su compra es de: %i\n",pcompra);

printf("¡¡GRACIAS POR SU COMPRA!!");

printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");

getch();

break;

}

}

while(opcion!=3);

return 0;

}

_____________________________________________________________________

FACTURA 2

#include<stdio.h>

#include<conio.h>

int main()

{

int descuento, codigo, cedula, dia,mes,ano,fecha, nit, rif, factura, punitario, ptotal1, ptotal2, cantidad, precioiva, opcion, pcompra, totalventas;

char cliente[30], descripcion[10], nombre[15], apellido[30];

factura=0;

totalventas=0;

do

{

printf("\n\n <<<<<BIENVENIDO A EL SISTEMA DE FACTURACION DE LA LIBRERIA UNIOJEDA>>>>>\n\n");

printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");

printf("1.Facturacion para un cliente personal. \n\n");

printf("2.Facturacion para empresas. \n\n");

printf("3.Salir del Sistema. \n\n");

scanf("%i",&opcion);

switch(opcion)

{

case 1:

printf("\nIntroducir el dia de compra: ");

scanf("%i",&dia);

printf("Mes: ");

scanf("%i",&mes);

printf("año: ");

scanf("%i",&ano);

printf("Introducir nombre: \n");

scanf("%s",&cliente);

printf("Introducir apellido: \n");

scanf("%s",&apellido);

printf("Introducir la cedula del cliente: \n");

scanf("%i",&cedula);

printf("Introducir el codigo del articulo: \n");

scanf("%i",&codigo);

printf("Introducir el nombre del articulo: \n");

scanf("%s",&descripcion);

printf("Introducir el precio del articulo: \n");

scanf("%i",&punitario);

printf("Introducir la cantidad de articulos: \n");

scanf("%i",&cantidad);

if(cantidad>=6)

{

ptotal1=(cantidad*punitario);

descuento=ptotal1*0.10;

ptotal2=ptotal1-descuento;

precioiva = (ptotal2 * (0.16));

pcompra=ptotal2+precioiva;

}

else if(cantidad>=12)

{

ptotal1=(cantidad*punitario);

descuento=ptotal1*0.15;

ptotal2=ptotal1-descuento;

precioiva = (ptotal2 * (0.16));

pcompra=ptotal2+precioiva;

}

else

{

ptotal1 = (cantidad * punitario);

descuento=0;

ptotal2=ptotal1-descuento;

precioiva = (ptotal1 * (0.16));

pcompra=ptotal1+precioiva;

}

factura = factura + 1;

printf("\n\nFecha: %i/%i/%i\n",dia,mes,ano);

printf("Factura N°: %i\n",factura);

printf("_______________________________________________________________________________\n\n");

printf("Nombre completo: %s %s\n",cliente,apellido);

printf("Cedula: %i\n",cedula);

printf("Codigo del art: %i\n",codigo);

printf("Nombre del Producto: %s\n",descripcion);

printf("Precio del Producto: %i\n",punitario);

printf("Cantidad de Articulos: %i\n",cantidad);

printf("Precio completo: %i\n",ptotal1);

printf("Descuento: %i\n",descuento);

printf("SUB-TOTAL: %i\n",ptotal2);

printf("IVA: %i\n",precioiva);

printf("El total de su compra es de: %i\n",pcompra);

totalventas=totalventas+pcompra;

printf("\n\n ¡¡GRACIAS POR SU COMPRA!!");

printf("\n\n_______________________________________________________________________________\n\n");

printf("\n\nPresione una tecla para volver a la pantalla inicial del sistema\n\n");

getch();

break;

case 2:

printf("\nIntroducir el dia de compra: ");

scanf("%i",&dia);

printf("Mes: ");

scanf("%i",&mes);

printf("año: ");

scanf("%i",&ano);

printf("\nIntroducir el nombre de la empresa: \n");

scanf("%s",&nombre);

printf("\nIntroducir el nit de la empresa: \n");

scanf("%i",&nit);

printf("\nIntroducir el rif de la empresa: \n");

scanf("%i",&rif);

printf("\nIntroducir el codigo del articulo: \n");

scanf("%i",&codigo);

printf("\nIntroducir el nombre del articulo: \n");

scanf("%s",&descripcion);

printf("\nIntroducir el precio del articulo: \n");

scanf("%i",&punitario);

printf("\nIntroducir la cantidad de articulos: \n");

scanf("%i",&cantidad);

if(cantidad>=6)

{

ptotal1=(cantidad*punitario);

descuento=ptotal1*0.10;

ptotal2=ptotal1-descuento;

precioiva = (ptotal2 * (0.16));

pcompra=ptotal2+precioiva;

}

else if(cantidad>=12)

{

ptotal1=(cantidad*punitario);

descuento=ptotal1*0.15;

ptotal2=ptotal1-descuento;

precioiva = (ptotal2 * (0.16));

pcompra=ptotal2+precioiva;

}

else

{

ptotal1 = (cantidad * punitario);

descuento=0;

ptotal2=ptotal1-descuento;

precioiva = (ptotal1 * (0.16));

pcompra=ptotal1+precioiva;

}

factura = factura + 1;

printf("\n_______________________________________________________________________________\n\n");

printf("\nLIBRERIA UNIOJEDA");

printf("\n\nFecha: %i/%i/%i\n",dia,mes,ano);

printf("Factura N°: %i\n",factura);

printf("Nombre de la Empresa: %s\n",nombre);

printf("Nit: %i\n", nit);

printf("Rif: %i\n", rif);

printf("Codigo del art: %i\n",codigo);

printf("Nombre del Producto: %s\n",descripcion);

printf("Precio del Producto: %i\n",punitario);

printf("Cantidad de Articulos: %i\n",cantidad);

printf("Precio completo: %i\n",ptotal1);

printf("Descuento: %i\n",descuento);

printf("SUB-TOTAL: %i\n",ptotal2);

printf("IVA: %i\n",precioiva);

printf("El total de su compra es de: %i\n",pcompra);

totalventas=totalventas+pcompra;

printf("\n\n ¡¡GRACIAS POR SU COMPRA!!");

printf("\n\n_______________________________________________________________________________\n\n");

printf("\n\nPresione una tecla para volver a la pantalla incial del sistema\n\n");

getch();

break;

}

}

while(opcion!=3);

printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n");

printf("\n El total vendido del dia: %i/%i/%i es de %i Bs\n", dia,mes,ano,totalventas);

printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");

return 0;

}

____________________________________________________________________________________________

PROGRAMA 3

#include<stdio.h>

#include<conio.h>

int main()

{

int sum,num1,num2,p,d,opcion;

do

{

printf("\nSeleccione proceso\n");

printf("1.Quieres Sumar 2 numeros\n");

printf("2.Quieres obtener toda la tabla de multiplicar\n");

printf("3.Quieres ver todo el abecedario\n");

printf("4.Quieres salir del sistema\n");

scanf("%i",&opcion);

switch(opcion)

{

case 1:

printf("Ingrese los dos numeros que desea sumar\n");

scanf("%i%i",&num1,&num2);

sum=num1+num2;

printf("La suma de los dos numeros es: %i\n",sum);

printf("\n\nPresione una tecla para volver a la pantalla incial del sistema");

getch();

break;

case 2:

for(d=1;d<=10;d++)

{

printf("La tabla del numero %i\n",d);

for(p=1;p<=10;p++)

{

printf("%i\n",d*p);

}

}

printf("\n\nPresione una tecla para volver a la pantalla incial del sistema");

getch();

break;

case 3:

int abc=65;

do

{

printf(" %c",abc);

abc++;

}

while(abc<=90);

getch();

break;

}

}

while(opcion!=4);

getch();

}

__________________________________________________________________________________________

PROGRAMA 4

#include<stdio.h>

int main()

{

int cont1=0,cont2=0,cont3=0,acum1=0,acum2=0,acum3=0,total2,opcion;

do

{

printf("SELECCIONE EL COMBO QUE DESEE:\n\n");

printf("1.Hamburguesa,papas grandes y refresco $50.00\n");

printf("2.Hamburguesa con queso y doble carne, papas grandes y refresco $65.00\n");

printf("3.Orden de tacos y refresco $32.00\n");

printf("4.Salir del sistema\n");

scanf("%i",&opcion);

switch(opcion)

{

case 1:

cont1=cont1+1;

break;

case 2:

cont2=cont2+1;

break;

case 3:

cont3=cont3+1;

break;

}

}

while(opcion!=4);

acum1=cont1*50;

acum2=cont2*65;

acum3=cont3*32;

total2=acum1+acum2+acum3;

printf("%i Personas seleccionaron el combo 1\n la venta total del combo 1 fue:%i\n\n",cont1,acum1);

printf("%i Personas seleccionaron el combo 2\n la venta total del combo 2 fue:%i\n\n",cont2,acum2);

printf("%i Personas seleccionaron el combo 3\n la venta total del combo 3 fue:%i\n\n",cont3,acum3);

printf("La venta total fue de:%i\n",total2);

return 0;

}

___________________________________________________________________________________________

PROGRAMA 5

#include<stdio.h>

#include<conio.h>

int main()

{

int num,fex,origen,fvacuna,fimpu,exit=1,pven=0,pext=0,a=0,b=0;

while(exit==1)

{

printf("Ingrese el Numero de pasaporte\n");

scanf("%i",&num);

printf("\nIngrese la Fecha de expedicion del pasaporte correspondiente\n" "1.Vencida 2.Vigente\n");

scanf("%i",&fex);

if(fex==1)

{

printf("Disculpe...REUCAUDO NO VIGENTE\n");

}

printf("\nOrigen del pasaporte: 1. Venezolano 2. Extranjero\n");

scanf("%i",&origen);

if(origen==1)

{

pven=pven+1;

}

else

{

pext=pext+1;

}

printf("\nFecha de expedicion del certificado de vacuna\n" "1. Vencido 2. Vigente\n");

scanf("%i",&fvacuna);

if(fvacuna==1)

{

printf("Disculpe... RECAUDO NO VIGENTE\n");

a=a+1;

}

printf("\nFecha de expedicion de la declaracion de impuesto\n" "1. Vencido 2. Vigente\n");

scanf("%i",&fimpu);

if(fimpu==1)

{

printf("Disculpe...RECAUDO NO VIGENTE\n");

b=b+1;

}

printf("\nDesea salir del sistema 1.NO 2.SI\n");

scanf("%i",&exit);

}

printf("El total de clientes que tienen pasaportes Venezolanos:%i\n",pven);

printf("El total de clientes que tienen pasaportes Extanjeros:%i\n",pext);

printf("El total de clientes con certificado de vacuna vencido:%i\n",a);

printf("El total de clientes con declaracion de impuestos vencido:%i\n",b);

getch();

return 0;

}

____________________________________________________________________________________________

ANÁLISIS LÉXICO

ANÁLISIS SINTÁCTICO

ANÁLISIS SEMÁNTICO

GENERACIÓN DE CÓDIGO

INTERMEDIO

GENERACIÓN DE CÓDIGO (ADMINISTRACIÓN DE LA MEMORIA)

OPTIMIZACIÓN DE CÓDIGO

CÓDIGO OBJETO

EN LENGUAJE ESNSAMBLADOR

Tabla de Símbolos

Compilador

Programa Fuente

Programa Objeto

Detección de Errores

Etapa de Análisis

Detección de Errores

y

Verificación con la Tabla de Símbolos

Etapa de Síntesis

Generador de Código

Intermedio

Optimización de Código

Ascendente

Descendente