Tuesday, February 27, 2007

T11-PROY

Integrantes:
Diana Fernández
Daniel Varela
Nombre del Proyecto: Diagramas de Gantt

Descripción:
El lenguaje recibirá los parámetros de un diagrama de Gantt como lo son: las actividades, con su correspondiente id, nombre, fecha de inicio, duración y dependencias; también recibirá los milestones con el id de la tarea a la cual pertenece, su nombre y fecha de realización. El lenguaje traducirá las instrucciones al lenguaje intermedio SLOGO, realizado por nosotros el parcial pasado.
Imagen de Ejemplo:


BNF:
(Nota: Los elementos NoTerminales están en Azul y los Terminales en Verde)

TASK:= Ta=ID&NOMBRE&BEGIN&LDURATION(&DEPENDENCIES)?;
MILESTONE:=Mi=ID&NOMBRE&TIME;
ID:=I:NUM
NOMBRE:=N:ALFANUM
BEGIN:=B:DATE
LDURATION:=L:DURATION
DURATION:=NUM(dOTRA|h)
OTRA:=@NUMh|epsilon
DEPENDENCIES:=D:(NUM)DEPEN
DEPEN:=,(NUM)DEPEN|epsilon
TIME:=T:DATE
NUM:=[0-9]+
ALFANUM:=[a-zA-Z][a-zA-Z0-9]*

Ejemplo del uso del lenguaje:

Ta=I:1&N:Tarea1&B:20/02/07&L:4d;
Ta=I:2&N:Tarea2&B:24/02/07&L:7h&D:1;
Ta=I:3&N:Tarea2&B:24/02/07&L:2d&D:1;
Ta=I:5&N:Tarea5&B:26/02/07&L:5d@3h&D:2,3;
Mi=I:5&N:Milestone1&T:02/03/07;

Tuesday, February 20, 2007

T10-BOOKS

Compiladores:

Compiladores : conceptos fundamentales / Bernard Teufel, Stephanie Schmidt, Thomas Teufel ; tr. Ernesto Morales Peake Pie impren Wilmington, Delaware : Addison-Wesley Iberoamericana, 1995
QA 76.76 .C65 T4818 1995


Autor Appel, Andrew W., 1960-
Titulo Modern compiler implementation in Java / Andrew W. Appel
Pie impren Cambridge [England] ; New York, NY, USA : Cambridge University press, 1998
QA76.73 .J38 A65 1998


Autor Muchnick, Steven S., 1945-
Titulo Advanced compiler design and implementation / Steven S. Muchnick
Pie impren San Francisco, Calif. : Morgan Kaufmann Publishers, c1997
QA 76.76 .C65 .M8 1997

Autor Louden, Kenneth C
Titulo Compiler construction : principles and practice / Kenneth C. Louden
Pie impren Boston : PWS Pub. Co., c1997
QA76.76.C65 L6

Autor Teufel, Bernard
Titulo Compiladores : conceptos fundamentales / Bernard Teufel, Stephanie Schmidt, Thomas Teufel ; tr. Ernesto Morales Peake
Pie impren Wilmington, Delaware : Addison-Wesley Iberoamericana, 1995
QA 76.76 .C65 T4818 1995

Autor Tremblay, Jean-Paul, 1938-
Titulo The theory and practice of compiler writing / Jean-Paul Tremblay, Paul G. Sorenson
Pie impren New York : McGraw-Hill, c1985
QA 76.6 .T734 1985

Autor Beam, Gary
Titulo Advanced clipper : dBase compiler applications / Gary Beam
Pie impren Blue Ridge Summit, PA : TAB Books, c1988
QA 76.9 .D3 .B43 1988


Autor Aho, Alfred V
Titulo Principles of compiler design / Alfred V. Aho, Jeffrey D. Ullman
Pie impren Reading, Mass. : Addison-Wesley Pub. Co., c1977
QA 76.5 .A4 .P7 1979

Thursday, February 1, 2007

T06-AUTOMATA: SLOGO

El siguiente autómata acepta la cadena a(ab)*c:



Código utilizado en el intérprete del profe para la prueba:



c none! b ,3! C 50@70,20!
c none! b,3! P M70,70 C70,70 100,30 135,65!
c black!
P M125,45 L135,65 L120,70!
90@47,a!

c black! C 150@70,20!
c none! b,3! P M168,70 C170,70 200,30 235,60!
c black!
P M225,40 L235,60 L220,65!
190@47,c!
c none! b ,3! C 250@70,20!
cblack! C 150@150,20!
c none! b,3! P M140,75 C140,75 115,125 145,155!
c black!
P M140,125 L135,140 L125,130!
115@115,a!

c none! b,3! P M165,155 C165,155 180,120 165,80!
c black!
P M180,90 L165,80 L160,95!
175@115,b!





Para a(ab)*c:

TEXTO ::= a AB c (epsilon) // nota no supe poner el simbolo
// de Epsilon(fin de cadena)
AB := AB ab

Tuesday, January 23, 2007

T04-LEXER-ER-JAVA

Al fin salió en Java :)

la liga para bajar el archivo java del lexer de LOGO es:

http://mipagina.chi.itesm.mx/.a00746263/Traductores/RegExpLogo.java

Saturday, January 20, 2007

T04-LEXER-ER

#include
#include
#include // Boost.Regex lib

using namespace std;

int main( ) {

std::string s;

while(true)
{

cout << "Expression to be evaluated";
cin >> s;

try
{
boost::regex re("(((F|B)\\s\\d{1,4})|(L|R)\\s((00\\d)|((0-2)\\d{1,2})|3((0-5)\\d|60))\\.)+");
if (boost::regex_match(s, re))
{
cout << s << "is not valid"<< endl;
}
}
catch (boost::regex_error& e)
{
cout << " error in REGEX" << endl;
continue;
}

}
}


Tenemos problemas al momento de compilar, pero hemos investigado y se trata de la versión de la librería, entonces pues no supimos donde bajar otra o como se utiliza la que tenemos.

Diana Fernández
Daniel Varela

Thursday, January 18, 2007

T03-LEXER-STL

La liga para bajar los archivos .cpp y .h del programa es:
http://mipagina.chi.itesm.mx/.a00738538/traductores/Lexer.zip

Utilizamos un código que hace un SplitString parecido al StringTokenizer de java, encontrado en la siguiente liga:
http://www.codeproject.com/string/stringsplit.asp

Tuvimos problemas con el split para los espacios, así que utilizamos guines bajos(_) en lugar de espacios.

Equipo:
Diana Fernández
Daniel Varela

Monday, January 15, 2007

T02-STL: Usando la librería STL de C++:

#include <iostream>
#include <list>
#include <deque>

using std::cout;
using std::cin;
using std::endl;
using std::deque;
using std::sort;

struct Deque : deque<double> {
Deque(double *i, int s) : deque<double>() {
for(int j = 0; j < s; j++)
this->push_back(*i++);
}
void print() { // Imprime lista
for(deque<double>::iterator it=this->begin(); it!=this->end(); it++)
cout << *it << " ";
cout << endl;
}

void sort(){
std::sort(this->begin(),this->end());
}

void unique(){
deque<double>::iterator s;
for(;s < this->end();){
s = std::unique(this->begin(),this->end());
this->erase(s);
}

std::unique(this->begin(),this->end());
}

void reverse(){
std::reverse(this->begin(),this->end());
}

};

int main()
{
const int si = 5;
double a[si];
a[0] = 3.1;
a[1] = 1.3;
a[2] = 2.0;
a[3] = 2.0;
a[4] = 1.3;
Deque list1 = Deque(a, si);
list1.print();
list1.sort();
list1.print();
list1.unique();
list1.print();
list1.reverse();
list1.print();
cin.ignore(); // Pausa = cin.get()
}

T02-STL: Usando la librería STL de C++:

#include <iostream>
#include <list>
#include <vector>

using std::cout;
using std::cin;
using std::endl;
using std::vector;
using std::sort;

struct Vector : vector<int> {
Vector(int *i, int s) : vector<int>() {
for(int j = 0; j < s; j++)
this->push_back(*i++);
}
void print() { // Imprime lista
for(vector<int>::iterator it=this->begin(); it!=this->end(); it++)
cout << *it;
cout << endl;
}

void sort(){
std::sort(this->begin(),this->end());
}

void unique(){
vector<int>::iterator s;
for(;s < this->end();){
s = std::unique(this->begin(),this->end());
this->erase(s);
}
}

void reverse(){
std::reverse(this->begin(),this->end());
}

};

int main()
{
const int si = 5;
int a[si];
a[0] = 3;
a[1] = 1;
a[2] = 2;
a[3] = 2;
a[4] = 4;
Vector list1 = Vector(a, si);
list1.print();
list1.sort();
list1.print();
list1.unique();
list1.print();
list1.reverse();
list1.print();
cin.ignore(); // Pausa = cin.get()
}

Friday, January 12, 2007

T01-TOOLS: C++, STL y Boost

C++:
Conocido lenguaje de alto nivel que incluye características de los de bajo nivel. Se conoce que es un lenguaje multi paradigma ya que soporta:

  • programación procedimental
  • abstracción de datos
  • orientación a objetos
  • programación genérica

Para acceder a un tuutorial de progración en C++, desde lo más básico a lo más complejo, entra en: http://www.cplusplus.com/doc/tutorial/

A continuación se muestran ligas a páginas de tutoriales que permiten entender mejor las librerias y como pueden ser utilizadas:

Boost:

STL:

La siguiente liga tiene tutoriales para C++ y para STL:C Programing

Referencias:
Deitel (2004). C++ How to Program. Prentice Hall. Fourth Edition.
http://en.wikipedia.org/wiki/C++