jueves, 14 de enero de 2010

Gramatica y Estructura del lenguaje SQL

Estructura de un Programa en SQL

ALTER PROCEDURE spu_addCliente @nombre varchar(100),

@apellido1 varchar(100),

@apellido2 varchar(100),

@nifCif varchar(20),

@fxNaciento datetime

AS

BEGIN TRY

BEGIN TRAN

INSERT INTO CLIENTES

(nombre, apellido1, apellido2, nifcif, fxnacimiento) VALUES

(@nombre, @apellido1, @apellido2, @nifCif, @fxNaciento)

COMMIT

END TRY

BEGIN CATCH

ROLLBACK

PRINT ERROR_MESSAGE()

END CATCH

Gramática y expresiones:

<> : : = <>

<> : : = <>

<> : : = <>>

<> : : = <> | | < Delete > | <> | <>

<> : : = if <> { <> }

<> : : = if <> { <> } else { <> }

< else if > : : = if <> { <> } elseif <> { <> } else { <> }

<> : : = switch <> { case 1: <> case 2: <>

case 3: <> case n: <> default: <> }

<> : : = while <> { <> }

< do while > : : = do { <> } while <>

<> : : = for <> <> { <> }

<> : : = <>

<> : : = <>

<> : : = <>

<> : : = vacio

<> : : = <> = <>

<> : : = <>

<> : : = <>

: : = <> | <> | <> …| <> |<> | <> | <> …| <>

<> : : = <>| | <>

: : = <> |<> |<> |<> |<> |<> |<> |<> |<> |<>

<> : : = < . > | < , > |< : > |< ; > |< - > |<>

<> : : = > | < | = = | ! = | > = | < =

<> : : = AND | &&| OR | XOR |

: : = +=| - = | * = | / = | . = | =

<> : : = ++ | --

<> : : = <>

<> : : = <> | <> | <>

<> : : = <> <> <> |

<> <> <>

<> : : = <> <> <>

<> : : = function <> ( <> ) { <> }

<> : : = | <>

<> : : = <> | <>

Automata de Pila que analisa las letras a b c

package analizador;

// Automata de Pila que analiza las letras abc

import java.io.*;

import java.util.Stack;

/**

*

* @author Edson

*/

public class analizador {

public static void main(String args[]) throws IOException

{

String cadena;

try

{

BufferedReader n=new BufferedReader(new FileReader("cadenas.txt"));

while((cadena=n.readLine())!=null){

comprueba(cadena);

}

}

catch(FileNotFoundException e)

{

System.out.println("No se encuentra el archivo");

}

}

public static void comprueba(String palabra)

{

String cadena=palabra+'#';

String S="S",a="a",b="b",c="c";

Stack pila = new Stack();

int tam=cadena.length(),i=0;

int matriz [][]=new int [6][5];

// a b c FC

matriz[1][1]=1; matriz[1][2]=2; matriz[1][3]=3; matriz[1][4]=90;

matriz[2][1]=4; matriz[2][2]=90; matriz[2][3]=90; matriz[2][4]=90;

matriz[3][1]=90; matriz[3][2]=5; matriz[3][3]=90; matriz[3][4]=90;

matriz[4][1]=90; matriz[4][2]=90; matriz[4][3]=6; matriz[4][4]=90;

matriz[5][1]=90; matriz[5][2]=90; matriz[5][3]=90; matriz[5][4]=100;

pila.clear();

pila.push(S);

int fila=0,col=0;

do

{

try{

if(pila.empty()==true)

{

fila=5;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==S)

{

fila=1;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==a)

{

fila=2;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==b)

{

fila=3;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(pila.peek()==c)

{

fila=4;

if(cadena.charAt(i)=='a')

col=1;

if(cadena.charAt(i)=='b')

col=2;

if(cadena.charAt(i)=='c')

col=3;

if(cadena.charAt(i)=='#')

col=4;

}

if(matriz[fila][col]==1)

{

pila.pop();

pila.push(a);

pila.push(S);

pila.push(a);

}

if(matriz[fila][col]==2)

{

pila.pop();

pila.push(b);

pila.push(S);

pila.push(b);

}

if(matriz[fila][col]==3)

{

pila.pop();

pila.push(c);

}

if(matriz[fila][col]==4)

{

pila.pop();

i++;

}

if(matriz[fila][col]==5)

{

pila.pop();

i++;

}

if(matriz[fila][col]==6)

{

pila.pop();

i++;

}

}catch(java.util.EmptyStackException e){

if(matriz[fila][col]==100 && pila.empty()==true)

System.out.println("Cadena Aceptada");

if(matriz[fila][col]==90 && pila.empty()==true)

System.out.println("Cadena No Aceptada");

break;

}

}while(i

}//fin comprueba

}//fin clase

// CODIGO PILA

package pila;

/**

*

* @author Edson

*/

public class Pila {

int tope=-1;

int vec[];

Pila(int max)

{

vec=new int [max];

}

public boolean llena()

{

if (tope==vec.length-1)

return true;

else

return false;

}

public boolean vacia()

{

if (tope==-1)

return true;

else

return false;

}

public void push(int dato)

{

if (llena()== true)

System.out.println("Overflow");

else

if (tope==-1)

{

tope=0;

vec[tope]=dato;

}

else

{

tope++;

vec[tope]=dato;

}

}

public int pop()

{

int aux;

if (vacia()==true)

{

System.out.println("La pila esta vacia");

return -1;

}

else

{

aux=vec[tope];

tope--;

}

return aux;

}

public void Imprime_Datos()

{

if(vacia()==true)

{

System.out.println("La pila esta vacia, ingrese datos primero:");

}

else

for(int Contador=0;Contador

System.out.println("Los valores de la pila son:"+vec[Contador]);

}

}

Programa de automata de Pila que analisa las expresiones matematicas con identificadores

/* Gramatica que utilizo este programa Derivada y eliminando la recursividad
E=TE' | T
E'=+TE'|-TE'|e
T=FT'|F
T'=*FT'|/FT'|e
F=P^F|P
P=-P|EL
EL=(E)|ID|CONSTANTE
*/

// Automata

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package paqApplet;
import java.io.*;
/**
*
* @author Edson
*/
public class Afd {

int z;
String r;
public String validador(String palabra)
{
Pila app = new Pila();
String caden = palabra, cadena = null;
int tam = caden.length();
int l = 0;
//char cad = 0;

while(l<= tam) { try { if(pila.empty() == true) { fila = 18; if(cadena.charAt(i)=='+') col = 1; if(cadena.charAt(i)=='-') col = 2; if(cadena.charAt(i)=='*') col = 3; if(cadena.charAt(i)=='/') col = 4; if(cadena.charAt(i)=='^') col = 5; if(cadena.charAt(i)=='(') col = 6; if(cadena.charAt(i)==')') col = 7; if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_') col = 8; if(Character.isDigit(cadena.charAt(i))&&i==0) col = 9; if(cadena.charAt(i)=='#') col = 10; }// fin pila.empty() if(pila.peek()==E) { fila = 1; col = 10; }//fin pila.peek==E if(pila.peek()==Ex) { fila = 2; if(cadena.charAt(i)=='+') col = 1; else if(cadena.charAt(i)=='-') col = 2; else col = 10; }//fin pila.peek==Ex if(pila.peek()==T) { fila = 3; col = 10; }//fin pila.peek==T if(pila.peek()==Tx) { fila = 4; if(cadena.charAt(i)=='*') col = 3; else if(cadena.charAt(i)=='/') col = 4; else col = 10; }//fin pila.peek==Tx if(pila.peek()==Z) { fila = 5; if(cadena.charAt(i)=='^') col=5; else col=10; }//fin pila.peek==Z if(pila.peek()==F) { fila = 6; col = 10; }//fin pila.peek==F if(pila.peek()==P) { fila = 7; if(cadena.charAt(i)=='-') col = 2; else col = 10; }//fin pila.peek==P if(pila.peek()==M) { fila = 8; if(cadena.charAt(i)=='(') col = 6; else if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_') col = 8; if(Character.isDigit(cadena.charAt(i))) col = 9; }//fin pila.peek==M if(pila.peek()==p) { fila = 9; if(cadena.charAt(i)=='(') col = 6; else col = 10; }//fin pila.peek==p ( if(pila.peek()==q) { fila = 10; if(cadena.charAt(i)==')') col = 7; else col = 10; }//fin pila.peek==q ) if(pila.peek()==s) { fila = 11; if(cadena.charAt(i)=='+') col = 1; else col = 10; }//fin pila.peek==s + if(pila.peek()==r) { fila = 12; if(cadena.charAt(i)=='-') col = 2; else col = 10; }//fin pila.peek==q ) if(pila.peek()==m) { fila = 13; if(cadena.charAt(i)=='*') col = 3; else col = 10; }//fin pila.peek==m * if(pila.peek()==d) { fila = 14; if(cadena.charAt(i)=='/') col = 4; else col = 10; }//fin pila.peek==d / if(pila.peek()==x) { fila = 15; if(cadena.charAt(i)=='^') col = 5; else col = 10; }//fin pila.peek==x ^ if(pila.peek()==id) { fila = 16; if(cadena.charAt(i)=='+') col = 1; if(cadena.charAt(i)=='-') col = 2; if(cadena.charAt(i)=='*') col = 3; if(cadena.charAt(i)=='/') col = 4; if(cadena.charAt(i)=='^') col = 5; if(cadena.charAt(i)=='(') col = 6; if(cadena.charAt(i)==')') col = 7; if(Character.isLetter(cadena.charAt(i)) || Character.isDigit(cadena.charAt(i)) || cadena.charAt(i)=='_') col = 8; if(Character.isDigit(cadena.charAt(i))&&i==0) col = 9; if(cadena.charAt(i)=='#') col = 10; }//fin pila.peek==id if(pila.peek()==c) { fila = 17; if(Character.isDigit(cadena.charAt(i))) col = 9; else col = 10; }//fin pila.peek==c if(matriz[fila][col] == 2) { pila.pop(); pila.push(Ex); pila.push(T); }//fin matriz == 2 if(matriz[fila][col] == 3) { pila.pop(); pila.push(Ex); pila.push(T); pila.push(s); }//fin matriz == 3 if(matriz[fila][col] == 4) { pila.pop(); pila.push(Ex); pila.push(T); pila.push(r); }//fin matriz == 4 if(matriz[fila][col] == 5) { pila.pop(); }//fin matriz == 5 if(matriz[fila][col] == 6) { pila.pop(); pila.push(Tx); pila.push(F); }//fin matriz == 6 if(matriz[fila][col] == 7) { pila.pop(); pila.push(Tx); pila.push(F); pila.push(m); }//fin matriz == 7 if(matriz[fila][col] == 8) { pila.pop(); pila.push(Tx); pila.push(F); pila.push(d); }//fin matriz == 8 if(matriz[fila][col] == 9) { pila.pop(); }//fin matriz == 9 if(matriz[fila][col] == 10) { pila.pop(); pila.push(Z); pila.push(P); }//fin matriz == 10; if(matriz[fila][col] == 11) { pila.pop(); pila.push(F); pila.push(x); }//fin matriz == 11; if(matriz[fila][col] == 12) { pila.pop(); }//fin matriz == 12 if(matriz[fila][col] == 13) { pila.pop(); pila.push(P); pila.push(r); }//fin matriz == 13 if(matriz[fila][col] == 14) { pila.pop(); pila.push(M); }//fin matriz == 14 if(matriz[fila][col] == 15) { pila.pop(); pila.push(q); pila.push(E); pila.push(p); }//fin matriz == 15 if(matriz[fila][col] == 16) { pila.pop(); id = epp.analizador(cadena,i); i = epp.contador(); if(id==null) { col = 0; break; } else pila.push(id); }//fin matriz == 16 if(matriz[fila][col] == 17) { pila.pop(); c = epp.constante(cadena,i); i = epp.contador(); pila.push(c); }//fin matriz == 17 if(matriz[fila][col] == 18) { pila.pop(); i++; }//fin matriz == 18 if(matriz[fila][col] == 19) { pila.pop(); i++; }//fin matriz == 19 if(matriz[fila][col] == 20) { pila.pop(); i++; }//fin matriz == 20 if(matriz[fila][col] == 21) { pila.pop(); i++; }//fin matriz == 21 if(matriz[fila][col] == 22) { pila.pop(); i++; }//fin matriz == 22 if(matriz[fila][col] == 23) { pila.pop(); i++; }//fin matriz == 23 if(matriz[fila][col] == 24) { pila.pop(); i++; }//fin matriz == 24 if(matriz[fila][col] == 25) { pila.pop(); i++; }//fin matriz == 25 if(matriz[fila][col] == 26) { pila.pop(); i++; }//fin matriz == 26 while(h< cad = "Cadena Aceptada" col ="="" cad = "Cadena No Aceptada" cad = "Cadena No Aceptada" defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();

jLabel1.setText("Cadena a Analizar");

jLabel2.setText("Analisis");

jButton1.setText("Analizar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(33, 33, 33)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE))
.addGap(53, 53, 53)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jButton1)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField2)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)))
.addContainerGap(67, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(89, 89, 89)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(34, 34, 34)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(50, 50, 50)
.addComponent(jButton1)
.addContainerGap(59, Short.MAX_VALUE))
);
}//

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Pila app = new Pila();
Afd epp = new Afd();
jTextField2.setText(app.pila(epp.validador(jTextField1.getText())));
}


// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration

}