Linguagens e Programação BISON. Paulo Proença

Tamanho: px
Começar a partir da página:

Download "Linguagens e Programação BISON. Paulo Proença"

Transcrição

1 Linguagens e Programação BISON

2 BISON Gerador de analisadores sintáticos. Converte uma gramática independente de contexto LARL(1) 1 num programa C capaz de processar frases da linguagem. Gramática LARL(1) independente de contexto. Especificação do processo de análise apenas com um token de avanço. 1 LARL : Look-Ahead Left to right Rightmost derivation

3 BISON & FLEX O BISON integra-se com o FLEX para o reconhecimento dos tokens da linguagem Excerto de programa int square ( int x ) { return x * x ; } Análise léxica (FLEX) TIPO_INT '{' RETURN ID '*' ID ';' '}' ID '(' TIPO_INT ID ')' Gramática BISON para a Análise sintática funcao: tipo ID '(' listaparametros ')' blocoinstrucoes; blocoinstrucoes: '{' instrucoes '}'; instrucoes: /*vazio*/ instrucoes instrucao; tipo: TIPO_INT TIPO_FLOAT TIPO_CHAR ; ( )

4 Ciclo de vida do programa BISON Erros de BISON ficheiro fonte bison.y BISON ficheiro fonte C.tab.c Ficheiro texto 1 Ficheiro texto Ficheiro 3 texto 2 opção -d ficheiro de cabeçalho C.tab.h Compilador (gcc) programa executável Erros de FLEX Resultado 3 Resultado 2 Resultado 1 ficheiro fonte flex.flex FLEX include yylex() ficheiro fonte C.c

5 Passos para a compilação >> bison d ficheiro.y >> flex ficheiro.flex Produz: ficheiro.tab.c A opção " d" implica a criação do ficheiro.tab.h >> gcc ficheiro.tab.c lex.yy.c -lfl Produz: lex.yy.c Produz: a.out

6 Declarações Ficheiro BISON Formato de um ficheiro BISON %{ #include <stdio.h> int numargs=0, numerros=0; %} %token ID INT REAL %start inicio ( ) Instruções C Instruções que serão incluídas no ficheiro C gerado pelo BISON. Os exemplos mais comuns são: - inclusão ficheiros.h - declaração de variáveis e constantes Declarações BISON Definições BISON que incluem: - declaração de tokens e dos seus tipos - precedência de operadores - axioma da gramática

7 Gramática Ficheiro BISON Formato de um ficheiro BISON ( ) %% inicio: /*vazio*/ lista_args ; lista_args: arg lista_args ',' arg ; arg: ID {numargs++;} INT {numargs++;} REAL {numargs++;} ; %% Regra inicial - Definida com %start Alternativa vazia - Definida sem conteúdo - Por questão de legibilidade utilizase o comentário /*vazio*/ Gramática - Notação BNF Regras definidas em minúsculas O símbolo definido como é : Tokens com mais de um caracter definidos em maiúsculas e com um só caracter especificados entre plicas ( ) Final da regra - As regras terminam com ;

8 Rotinas em C Ficheiro BISON Formato de um ficheiro BISON ( ) Evoca o analisador sintático int main() { yyparse(); if (numerros == 0) printf("frase válida\n"); else printf("frase inválida\nnº de erros: %d\n", numerros); printf("nº de argumentos: %d\n",numargs); return 0; } int yyerror(char *s) { numerros++; printf("erro sintático ou semântico: %s\n", s); }

9 Propostas de Exercícios 1. Crie o programa Hello World com BISON e FLEX. Os tokens existentes são HELLO e WORLD. Sempre que o texto a analisar tiver os dois tokens pela ordem certa, deve imprimir a frase Hello World!!!.

10 1. pl5ex1.flex Propostas de Exercícios %{ #include "pl5ex1.tab.h" /* header file criado pelo BISON */ extern int nerr; /* variável declarada no BISON */ %} %% [ \t] return ' '; Hello return HELLO; World return WORLD;. {printf("erro léxico: simbolo desconhecido %s\n", yytext);nerr++;} \n return 0; <<EOF>> return 0; %%

11 1. pl5ex1.y Propostas de Exercícios %{ #include <stdio.h> int existe=0; int nerr=0; %} %token HELLO WORLD %start inicio %% inicio: %% HELLO ' ' WORLD {existe=1;} ; ( )

12 1. pl5ex1.y ( ) Propostas de Exercícios int main() { yyparse(); if(existe) printf("\nhello World!!!\n"); else printf("frase inválida\nnumero de erros: %d\n",nerr); return 0; } int yyerror(char *s) { nerr++; printf("erro semantico: %s\n",s); }

13 Valores semânticos A variável yylval permite guardar os valores semânticos (lexemas) identificados pelo analisador léxico. Por omissão yylval é definida como um inteiro Armazenamento do lexema no FLEX [0-9]+ { yylval=atoi(yytext); return INT; } É possível redefinir o tipo de yylval Redefinição do tipo de yylval #define YYSTYPE double

14 Valores semânticos Para definição de tipos mais complexos utiliza-se a diretiva BISON %union. Diretiva %union no ficheiro BISON %union { char int float } *palavra; numinteiro; numreal; Armazenamento do lexema no FLEX [0-9]+ { yylval.numinteiro=atoi(yytext); return INT; } [a-za-z]+ { yylval.palavra=strdup(yytext); return STRING; }

15 Ações Semânticas O BISON pode ter ações semânticas ao longo das regras; Cada ação semântica ocupa um $ da regra dependendo da posição ocupada; O lado esquerdo (regra) é referenciado sempre por $$. expressao: INT { printf("inteiro = %d\n",$1); } '+' { printf("operador = %d\n",$2); } INT { printf("inteiro = %d\n",$3); $$=$1+$3; } ;

16 Propostas de Exercícios 2. Crie um analisador usando o FLEX e o BISON, que reconheça frases constituídas por dois inteiros separados por um operador relacional (=, <, >, <=, >=, <>). O analisador deve indicar se a frase esta de acordo com a sintaxe, e se a comparação é verdadeira ou falsa. 10 <= 20 '\n' - verdadeiro 5 = 10 '\n' -falso 120 <> 130 '\n' - verdadeiro > 10 '\n' - erro de sintaxe

17 2. Propostas de Exercícios pl5ex2.flex %{ #include "pl5ex2.tab.h" extern int nerr; %} %% [ \t] return 0; [0-9]+ {yylval=atoi(yytext);return INT;} = return IGUAL; \<= return MENOR_IGUAL; \>= return MAIOR_IGUAL; \<\> return DIFERENTE; \< return MENOR; \> return MAIOR;. {printf("erro léxico: %s\n", yytext);nerr++;} \n return 0; <<EOF>> return 0; %%

18 2. Pl5ex2.y %{ %} Propostas de Exercícios #include <stdio.h> int vlogico; int nerr=0; %token INT IGUAL MAIOR MENOR MAIOR_IGUAL MENOR_IGUAL DIFERENTE %start inicio ( )

19 2. Pl5ex2.y Propostas de Exercícios ( ) %% inicio: expigual expmaior expmenor expmaiorigual expmenorigual diferente; expigual: expmaior: expmenor: ( ) INT IGUAL INT {vlogico=($1==$3);} ; INT MAIOR INT {vlogico=($1>$3);} ; INT MENOR INT {vlogico=($1<$3);} ;

20 2. Pl5ex2.y Propostas de Exercícios ( ) expmaiorigual: INT MAIOR_IGUAL INT {vlogico=($1>=$3);} ; expmenorigual: INT MENOR_IGUAL INT {vlogico=($1<=$3);} ; diferente: %% ( ) INT DIFERENTE INT {vlogico=($1!=$3);} ;

21 Propostas de Exercícios 2. Pl5ex2.y ( ) int main() { yyparse(); printf("%s\n",(vlogico==0)?"falso":"verdadeiro"); return 0; } int yyerror(char *s) { nerr++; printf("erro semantico: %s\n",s); }

22 Propostas de Exercícios 3. Reescreva a gramática do exercício 2, de modo a: i. aceitar inteiros e letras (a-z e A-Z); ii. iii. iv. aceitar várias comparações na mesma linha; testar a incompatibilidade de tipos entre inteiros e letras; fazer a recuperação dos erros ocorridos. 10 <= 20 = 20 '\n' verdadeiro verdadeiro 5 < 10 >= 5 < 2 '\n' verdadeiro verdadeiro falso 120 <> A'\n' incompatível z <> A'\n' verdadeiro > 10 '\n' - erro de sintaxe

23 3. Propostas de Exercícios pl5ex3.flex %{ #include <stdlib.h> #include "PL5Ex3Defs.h" #include "PL5Ex3.tab.h" %} %% [ \t] return 0; [0-9]+ {yylval.valor.numero=atoi(yytext); [a-za-z]+ yylval.valor.tipo=integer;return INT;} {yylval.valor.palavra=strdup(yytext); yylval.valor.tipo=string;return PALAVRA;} = return IGUAL; \<= return MENOR_IGUAL; \>= return MAIOR_IGUAL; \<\> return DIFERENTE; \< return MENOR; \> return MAIOR;. /*ignorado*/ \n return yytext[0]; <<EOF>> return 0; %%

24 3. Propostas de Exercícios pl5ex3defs.h typedef enum {INTEGER, STRING} ETipo; typedef struct{ int numero; char *palavra; ETipo tipo; }SValor;

25 3. pl5ex3.y %{ Propostas de Exercícios #include <stdio.h> #include "PL5Ex3Defs.h" int vlogico; int nerr=0; %} void compara(svalor, int, SValor); %union{ SValor valor; } %token <valor> INT PALAVRA IGUAL MAIOR MENOR MAIOR_IGUAL MENOR_IGUAL DIFERENTE %type <valor> exprs %start exprs_linha %% (...)

26 3. pl5ex3.y Propostas de Exercícios (...) %% exprs_linha: /*vazio*/ exprs_linha exprs '\n' ; exprs: %% (...) INT {$$.numero = $1.numero; $$.tipo = $1.tipo;} PALAVRA {$$.palavra = $1.palavra; $$.tipo = $1.tipo;} exprs IGUAL INT { compara($1, IGUAL, $3); $$ = $3; } exprs IGUAL PALAVRA { compara($1, IGUAL, $3); $$ = $3; } exprs MAIOR INT { compara($1, MAIOR, $3); $$ = $3; } exprs MAIOR PALAVRA { compara($1, MAIOR, $3); $$ = $3; } exprs MENOR INT { compara($1, MENOR, $3); $$ = $3; } exprs MENOR PALAVRA { compara($1, MENOR, $3); $$ = $3; } exprs MAIOR_IGUAL INT { compara($1, MAIOR_IGUAL, $3); $$ = $3; } exprs MAIOR_IGUAL PALAVRA { compara($1, MAIOR_IGUAL, $3); $$ = $3; } exprs MENOR_IGUAL INT { compara($1, MENOR_IGUAL, $3); $$ = $3; } exprs MENOR_IGUAL PALAVRA { compara($1, MENOR_IGUAL, $3); $$ = $3; } exprs DIFERENTE INT { compara($1, DIFERENTE, $3); $$ = $3; } exprs DIFERENTE PALAVRA { compara($1, DIFERENTE, $3); $$ = $3; } error { yyerror("erro de sintaxe");} ;

27 3. pl5ex3.y Propostas de Exercícios (...) void compara (SValor v1, int op, SValor v2) { if(v1.tipo!= v2.tipo){ puts("incompativel"); return; } switch(op){ case IGUAL: vlogico=(v1.tipo==integer)? (v1.numero==v2.numero):(strcmp(v1.palavra,v2.palavra)==0); break; case MAIOR: vlogico=(v1.tipo==integer)? (v1.numero>v2.numero):(strcmp(v1.palavra,v2.palavra)>0); break; case MENOR: vlogico=(v1.tipo==integer)? (v1.numero<v2.numero):(strcmp(v1.palavra,v2.palavra)<0); break; case MAIOR_IGUAL: vlogico=(v1.tipo==integer)? (v1.numero>=v2.numero):(strcmp(v1.palavra,v2.palavra)>=0); break; case MENOR_IGUAL: vlogico=(v1.tipo==integer)? (v1.numero<=v2.numero):(strcmp(v1.palavra,v2.palavra)<=0); break; case DIFERENTE: vlogico=(v1.tipo==integer)? (v1.numero!=v2.numero):(strcmp(v1.palavra,v2.palavra)!=0); } puts((vlogico==1)?"verdadeiro":"falso"); }(...)

28 3. pl5ex3.y (...) Propostas de Exercícios int main() { yyparse(); return 0; } int yyerror(char *s) { nerr++; printf("erro sintatico/semantico: %s\n",s); }

29 Precedência de operadores A precedência de operadores no BISON permite estabelecer a ordem pela qual as regras alternativas são processadas. Diretivas BISON %left - Declara um operador binário com associação à esquerda, isto é, o agrupamento é realizado primeiro à esquerda. Assim a frase x OPL y OPL z seria realizada primeiro a operação x OPL y e depois o resultado desta operação com OPL z ; %right - Declara um operador binário com associação a direita, isto e, o agrupamento e realizado primeiro a direita. Assim na frase x OPR y OPR z seria realizada primeiro a operação y OPR z e depois realizada o operação x OPR com o resultado obtido anteriormente; %nonassoc - Declara um operador não associativo, ou seja, um operador que não pode aparecer mais que uma vez de seguida. Assim, a frase x OPNA y OPNA z gera um erro.

30 Precedência de operadores A precedência relativa de diferentes operadores é controlada pela ordem das suas declarações. %left OP1 precedência mais baixa %left OP2 %right OP3 %left OP4 precedência mais alta Operadores definidos na mesma declaração têm igual nível de precedência. %left OP5 OP6 OP7

31 Precedência de operadores Exemplo ficheiro BISON ( ) %left '<' '>' '=' DIF MEN_IG MAI_IG %left '+' '-' %left '*' '/' %left '^' %nonassoc MENOS_UNARIO %% expressao: expressao '+' expressao expressao '-' expressao expressao '*' expressao expressao '/' expressao '-' expressao %prec MENOS_UNARIO operando ; operando: INTEIRO REAL ID; %% ( )

32 Propostas de Exercícios 5. Implemente, utilizando o BISON e o FLEX, um analisador sintático para reconhecimento duma expressão aritmética. A gramática é a seguinte: S ID '=' E E E E '+' E E '-' E E '*' E E '/' E '-'E '(' E ')' ID INT REAL Em que ID é um identificador (letra de 'a' a 'z'), INT um numero inteiro e REAL um numero real. O parser deve analisar múltiplas expressões e apresentar os resultados. Sempre que haja uma atribuição esse valor deve ser guardado, para ser utilizado com o identificador respectivo em outras expressões. Como tabela de símbolos, utilize um vector com uma posição para cada letra. i. Implemente este analisador sem usar precedências de operadores; ii. Implemente este analisador usando precedências de operadores.

33 5. Propostas de Exercícios pl5ex5.flex %{ #include "PL5Ex5Defs.h" #include "PL5Ex5.tab.h" extern int nerr; %} %% [ \t] return 0; [a-z] {yylval.valor.id=yytext[0]; yylval.valor.tipo=variavel; return ID;} [0-9]+\.[0-9]+ {yylval.valor.val=atof(yytext); yylval.valor.tipo=nreal; return REAL;} [0-9]+ {yylval.valor.val=atof(yytext);yylval.valor.tipo=nint; return INT;} \+ return ADD; - return SUB; \* return PROD; \/ return DIV; \( return OPENBR; \) return CLOSEBR; = return IGUAL;. {printf("erro léxico! simbolo não permitido: %s\n",yytext);nerr++;} \n return 0; <<EOF>> return 0; %%

34 5. Propostas de Exercícios pl5ex5defs.h typedef enum {NINT, NREAL, VARIAVEL} ETipo; typedef struct{ char id; float val; ETipo tipo; }SValor;

35 5. ii. Pl5Ex5.y %{ %} Propostas de Exercícios #include <stdio.h> #include "PL5Ex5Defs.h" int nerr; float resultado; float memoria[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; float calcula(svalor, int, SValor); void setvalor(svalor, SValor); float getvalor(svalor); %union{ SValor valor; }; %token <valor> INT REAL ADD SUB PROD DIV ID OPENBR CLOSEBR IGUAL %type <valor> e %left ADD SUB %left PROD DIV %start s (...)

36 5. ii. Pl5Ex5.y (...) %% Propostas de Exercícios s: ID IGUAL e { setvalor($1,$3); } e ; e: e ADD e { $$.val=calcula($1, ADD, $3); } e SUB e { $$.val=calcula($1, SUB, $3); } e PROD e { $$.val=calcula($1, PROD, $3); } e DIV e { $$.val=calcula($1, DIV, $3); } SUB e { $$.val=-$2.val; } OPENBR e CLOSEBR { $$.val=$2.val; } ID { $$.val=getvalor($1); } INT REAL ; %% (...)

37 5. ii. Pl5Ex5.y (...) Propostas de Exercícios int main() { while(1){ int nerr=0; printf(" %-8f :: ",resultado); yyparse(); } return 0; } int yyerror(char *s) { nerr++; printf("erro SEMANTICO: %s\n",s); } (...)

38 5. ii. Pl5ex5.y (...) Propostas de Exercícios void setvalor(svalor x, SValor y) { int indice=x.id - 'a'; memoria[indice]=y.val; } float getvalor(svalor x) { int indice=x.id - 'a'; resultado=memoria[indice]; return(resultado); } (...)

39 5. ii. Pl5Ex5.y (...) Propostas de Exercícios float calcula (SValor v1, int op, SValor v2) { switch(op){ case ADD: resultado=v1.val+v2.val; break; case SUB: resultado=v1.val-v2.val; break; case PROD: resultado=v1.val*v2.val; break; case DIV: resultado=v1.val/v2.val; } } return resultado;

40 Exercício de aula Desenvolver um analisador sintático, recorrendo ao flex e ao bison, que permita validar informação de datas segundo a seguinte gramática: data: NUM '-' NUM '-' YEAR NUM '.' MONTH '.' NUM NUM '/' NUM '/' NUM ; Onde NUM é um numero de dois dígitos, YEAR num número de quatro dígitos e MONTH é uma palavra. O analisador sintático deverá verificar a validade da data também no sentido da existência real da mesma.

41 Algoritmo de análise do BISON O funcionamento do BISON baseia-se numa pilha, onde são inseridos os tokens e os lexemas. Sempre que uma sequencia de tokens faz match com a regra atual, estes tokens são substituídos pela regra. A inserção de tokens na pilha é chamada de shift e a substituição dos tokens por regras é chamada de reduce.

42 Algoritmo de análise do BISON Gramática (recursiva à ESQUERDA): lista: INT Frase: 12,20,30 lista ',' INT PILHA

43 Algoritmo de análise do BISON Gramática (recursiva à esquerda): lista: INT Frase: 12,20,30 lista ',' INT PILHA PILHA shift INT reduce lista

44 Algoritmo de análise do BISON Gramática (recursiva à esquerda): lista: INT Frase: 12,20,30 lista ',' INT PILHA shift, lista

45 Algoritmo de análise do BISON Gramática (recursiva à esquerda): lista: INT Frase: 12,20,30 lista ',' INT PILHA PILHA shift INT, lista reduce lista

46 Algoritmo de análise do BISON Gramática (recursiva à esquerda): lista: INT Frase: 12,20,30 lista ',' INT PILHA shift, lista

47 Algoritmo de análise do BISON Gramática (recursiva à esquerda): lista: INT Frase: 12,20,30 lista ',' INT PILHA PILHA shift INT, lista reduce lista

48 Algoritmo de análise do BISON Gramática (recursiva à DIREITA): lista: INT Frase: 12,20,30 INT ',' lista PILHA

49 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA shift INT

50 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA shift, INT

51 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA shift INT, INT

52 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA shift, INT, INT

53 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA PILHA shift INT reduce lista,, INT INT,, INT INT

54 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA PILHA lista, INT, INT reduce lista, INT

55 Algoritmo de análise do BISON Gramática (recursiva à direita): lista: INT Frase: 12,20,30 INT ',' lista PILHA PILHA lista, INT reduce lista

56 Algoritmo de análise do BISON O funcionamento do analisador sintático pode ser acompanhado com detalhe utilizando a opção v (--verbose) no comado bison ou incluindo a diretiva %verbose no ficheiro ".y" Estes mecanismos produzem a criação de um ficheiro de extensão ".output", contendo informação sobre o funcionamento do analisador sintático (gramática, conflitos, símbolos terminais e não terminais e os estados do autómato gerado pelo BISON)

57 Algoritmo de análise do BISON calc.y %token NUM STR %left '+' '-' %left '*' %start exp %% exp: exp '+' exp exp '-' exp exp '*' exp exp '/' exp NUM ; useless: STR; %%

58 calc.output 1ª secção refere os símbolos e as regras que não são utilizadas na gramática as regras (e os símbolos não terminais) inúteis são removidas para produzir um parser mais reduzido os tokens não utilizados na gramática são preservados uma vez que podem ser reconhecidos pelo analisador léxico Nonterminals useless in grammar useless Terminals unused in grammar STR Rules useless in grammar 6 useless: STR

59 calc.output 2ª secção são listados os estados que têm conflitos State 8 conflicts: 1 shift/reduce State 9 conflicts: 1 shift/reduce State 10 conflicts: 1 shift/reduce State 11 conflicts: 4 shift/reduce

60 calc.output 3ª secção o BISON apresenta a gramática que é de facto utilizada Grammar 0 $accept: exp $end 1 exp: exp '+' exp 2 exp '-' exp 3 exp '*' exp 4 exp '/' exp 5 NUM e descreve a utilização dos símbolos Terminals, with rules where they appear ( ) Nonterminals, with rules where they appear ( )

61 calc.output 4ª secção especificação do autómato, com a descrição de cada estado e das respetivas transições (pointed rules) cada transição é uma regra de produção onde o. representa a localização atual do cursor de entrada State 0 0 $accept:. exp $end NUM shift, and go to state 1 exp go to state 2 State 1 5 exp: NUM. $default reduce using rule 5 (exp)

62 Algoritmo de análise do BISON O BISON pode produzir outras visualizações desta informação: Ficheiro DOT - opção g (--graph) Formato Graphviz Visualizador online em: Ficheiro XML - opção -x (--xml ) [=FILE] Este ficheiro pode ser transformado para HTML recorrendo a uma transformação XSLT

63 Conflitos BISON reduce/reduce Ocorre quando o BISON pode realizar reduce a duas regras simultaneamente Este erro deve-se normalmente a questões de ambiguidade da gramática DEVE SER SEMPRE CORRIGIDO

64 reduce/reduce Conflitos BISON Ocorre quando o BISON pode realizar reduce a duas regras simultaneamente sequencia: /* vazio */ talvez sequencia palavra ; talvez: /* vazio */ palavra ; palavra: TOKEN ; <sequencia> <sequencia><palavra> /*vazio*/<palavra> TOKEN <sequencia> <talvez> <palavra> TOKEN

65 Conflitos BISON - reduce/reduce Frase: TOKEN sequencia: /* vazio */ talvez sequencia palavra ; talvez: /* vazio */ palavra ; palavra: TOKEN ; shift TOKEN reduce palavra reduce talvez /*vazio*/ reduce sequencia palavra palavra

66 Conflitos BISON shift/reduce Ocorre quando o BISON pode realizar shift de um token ou reduce a uma regra simultaneamente Este erro deve-se normalmente a questões de ambiguidade da gramática O BISON resolve sempre este conflito usando o shift

67 shift/reduce Conflitos BISON Ocorre quando o BISON pode realizar shift de um token ou reduce a uma regra simultaneamente if_stmt: stmt: expr: IF expr THEN stmt IF expr THEN stmt ELSE stmt ; TOKEN if_stmt ; TRUE FALSE ; <if_stmt> IF <expr> THEN <stmt> IF <expr> THEN IF <expr> THEN <stmt> ELSE <stmt> <if_stmt> IF <expr> THEN <stmt> ELSE <stmt> IF <expr> THEN IF <expr> THEN <stmt> ELSE <stmt>

68 Conflitos BISON - shift/reduce Frase: IF <expr> THEN IF <expr> THEN <stmt> ELSE <stmt> if_stmt: IF expr THEN stmt IF expr THEN stmt ELSE stmt ; stmt: TOKEN if_stmt ; expr: TRUE FALSE ; shift ELSE stmt stmt THEN THEN expr expr IF THEN IF THEN reduce if_stmt THEN expr expr expr IF IF IF

69 Propostas de Exercícios 6. Considere um simulador de uma máquina de venda automática que dispõe de um conjunto de produtos e aceita moedas em euros ( 0.01, 0.02, 0.05, 0.10, 0.20, 0.50, 1.00, 2.00). O objetivo é selecionar um produto, introduzir o respetivo valor, receber o troco (se existir) e receber o produto. Considere os seguintes produtos: café ( 0.35), pingo ( 0.35), chá ( 0.35), chocolate ( 0.40), copo ( 0.05) e leite ( 0.30). O formato de entrada de dados deve obedecer à seguinte regra: <produto>,<moeda_1>,...<moeda_n> O formato de saída deve obedecer à seguinte regra: <produto>, <moeda_1>,...<moeda_n> "dinheiro insuficiente" Defina a gramática para que a máquina funcione sem interrupções e implemente-a utilizando o FLEX e o BISON.

70 Linguagens e Programação BISON

Linguagens Formais e Autómatos

Linguagens Formais e Autómatos Parte teórica - Duração: 5 min Nome Número Atenção: Responda às perguntas na folha do enunciado ndique o seu número e nome A prova é sem consulta Cada resposta errada terá uma cotação negativa de 2/3 do

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 30 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1 Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,

Leia mais

A linguagem C (visão histórica)

A linguagem C (visão histórica) A linguagem C (visão histórica) A linguagem C é uma linguagem de programação desenvolvida no ínício dos anos 70 por Dennis Ritchie, que trabalhava nos laboratórios Bell e que também inciou em paralelo,

Leia mais

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07. Tópicos avançados

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07. Tópicos avançados Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07 Tópicos avançados Este documento apresenta alguns métodos para a resolução de problemas, susceptíveis de ocorrer na resolução

Leia mais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

#include <stdio.h> Void main() { printf( Cheguei!\n); } INTRODUÇÃO A LINGUAGEM C #include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 04 Sintaxe e Semântica Edirlei Soares de Lima Sintaxe e Semântica A descrição de uma linguagem de programação envolve dois aspectos principais:

Leia mais

Análise Sintática Introdução

Análise Sintática Introdução Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais

Leia mais

Introdução ao FLEX e expressões regulares

Introdução ao FLEX e expressões regulares Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07 Ficha 1 Introdução ao FLEX e expressões regulares Objectivos: Familiarização com a ferramenta FLEX; Introdução ao reconhecimento

Leia mais

Legibilidade do código fonte

Legibilidade do código fonte Sumário Legibilidade do código fonte Exemplos Normas Instrução switch Sintaxe e Semântica Exemplo Tipos enumerados Exemplo Programação 2007/2008 DEEC-IST 1 Legibilidade do código fonte Exemplo: Considere

Leia mais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR Análise Bottom-Up Compiladores Análise sintática 5) Gramáticas SLR), LR) e LALR String Entrada -> Símbolo Inicial Regras aplicadas em reverso adiar decisões mais poderoso Noção de handle, redução, uso

Leia mais

Linguagem de Programação. Thiago Leite Francisco Barretto

Linguagem de Programação. Thiago Leite Francisco Barretto Linguagem de Programação Thiago Leite Francisco Barretto SCHILDT, H. C Completo e Total. 3ª Edição. São Paulo: Makron, 1997. Bibliografia Ementa

Leia mais

Construção de Compiladores Aula 3 - Analisador Sintático

Construção de Compiladores Aula 3 - Analisador Sintático Construção de Compiladores Aula 3 - Analisador Sintático Bruno Müller Junior Departamento de Informática UFPR 20 de Agosto de 2014 Definição A análise sintática (parsing) é um processo que verifica se

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1 INF1007: Programação 2 0 Revisão 06/08/2015 (c) Dept. de Informática - PUC-Rio 1 Tópicos Principais Variáveis e Constantes Operadores e Expressões Entrada e Saída Tomada de Decisão Construção com laços

Leia mais

Análise Semântica: Verificação de Tipos

Análise Semântica: Verificação de Tipos Análise Semântica: Verificação de Tipos Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores

Leia mais

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double

Leia mais

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Argumentos da linha de comando Funções recursivas Programação 2010/2011 DEEC-IST Arg. da linha de comando;

Leia mais

FACULDADE LEÃO SAMPAIO

FACULDADE LEÃO SAMPAIO FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler

Leia mais

K&R: Capitulo 2 IAED, 2012/2013

K&R: Capitulo 2 IAED, 2012/2013 Elementos da Linguagem C K&R: Capitulo 2 Elementos da Linguagem C Identificadores Tipos Constantes Declarações Operadores aritméticos, lógicos e relacionais Conversões de tipos Operadores de incremento

Leia mais

Introdução à Programação em C (II)

Introdução à Programação em C (II) Introdução à Programação em C (II) Resumo Streams de Texto Leitura e escrita de caracteres Caracteres como números inteiros Exemplos Cópia de Ficheiros Contagem de Caracteres Contagem de Linhas Contagem

Leia mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador

Leia mais

Argumentos da linha de comando Exemplos Recursividade de funções Exemplos

Argumentos da linha de comando Exemplos Recursividade de funções Exemplos Sumário Argumentos da linha de comando Exemplos Recursividade de funções Exemplos Programação 2007/2008 DEEC-IST 1 Argumentos da linha de comando Motivação: Nas aulas de laboratório foi utilizado o compilador

Leia mais

Compiladores. Conceitos Básicos

Compiladores. Conceitos Básicos Compiladores Conceitos Básicos Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz

Leia mais

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES LINGUAGEM C: VARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve

Leia mais

A Linguagem C. A forma de um programa em C

A Linguagem C. A forma de um programa em C A Linguagem C Criada em 1972 por D. M. Ritchie e K. Thompson. Tornou-se uma das mais importantes e populares, principalmente pela portabilidade e flexibilidade. Foi projetada para o desenvolvimento de

Leia mais

Ambiente de desenvolvimento

Ambiente de desenvolvimento Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa

Leia mais

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica. Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);

Leia mais

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES Linguagem C - Introdução Linguagens de Máquina Representação numérica Difícil utilização e compreensão Específica para cada máquina Linguagens Simbólicas(Assembly)

Leia mais

Linguagem C: Introdução

Linguagem C: Introdução Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais

Leia mais

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Exemplos de Aplicações

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

Introdução a Programação de Jogos

Introdução a Programação de Jogos Introdução a Programação de Jogos Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 06 Análise Sintática (Implementação) Edirlei Soares de Lima Análise Sintática A maioria dos compiladores separam a tarefa da análise sintática

Leia mais

Controlo de Execução. K&R: Capitulo 3

Controlo de Execução. K&R: Capitulo 3 Controlo de Execução K&R: Capitulo 3 IAED, 2009/2010 Controlo de Execução Instruções e Blocos if else-if switch Ciclos: Instruçõeswhile e for Instruçãodo-while break e continue goto e labels 2 IAED, 2009/2010

Leia mais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito

Leia mais

Introdução à Linguagem C Variáveis e Expressões

Introdução à Linguagem C Variáveis e Expressões INF1005: Programação 1 Introdução à Linguagem C Variáveis e Expressões 08/03/10 (c) Paula Rodrigues 1 Tópicos Principais Programando em C Funções Variáveis Define Operadores e Expressões Entrada e Saída

Leia mais

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação Entender o problema Encontrar um algoritmo para resolvê-lo Implementar o algoritmo numa linguagem de programação Permitem implementar um algoritmo Expressar o algoritmo numa forma que o computador entenda

Leia mais

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S. Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador

Leia mais

Linguagens de Programação Aula 4

Linguagens de Programação Aula 4 Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Autômatos finitos AF:exemplos... Cadeia de caracteres a,b,c 2/82 Na aula passada... Autômatos finitos AF:exemplos... Números inteiros(com

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2017.2 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Linguagem de Programação C

Linguagem de Programação C Linguagem de Programação C Aula 08 Diogo Pinheiro Fernandes Pedrosa Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais 13 de novembro de 2009 Introdução O que é uma linguagem

Leia mais

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de

Leia mais

Notações: in, pré e posfixada

Notações: in, pré e posfixada Notações: in, pré e posfixada Como avaliar uma expressão posfixada? A resposta a esta pergunta, vem de uma análise. Estamos tratando de operações binárias. Portanto, devemos avaliar a expressão da esquerda

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Introdução à Linguagem C Eduardo Simões de Albuquerque Instituto de Informática UFG 13/03/2006 1 História Inventada e desenvolvida por Dennis Ritchie em um DEC- PDP 11 Originária de: BCPL desenvolvida

Leia mais

Introdução à Programação em C (I)

Introdução à Programação em C (I) Introdução à Programação em C (I) IAED Tagus, 2009/2010 Organização de Ficheiros em C Organização Típica de Ficheiros em C Inclusão de bibliotecas de sistema Inclusão de bibliotecas locais Definição de

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 02 Prof. geovanegriesang@unisc.br Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores

Leia mais

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34 Análise Sintática II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 34 Sumário 1 Introdução 2 Ambiguidade 3 Análise sintática descendente 4

Leia mais

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes Introdução à Programação Introdução a Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Introdução Variáveis Tipos de dados Operadores e Expressões: Operadores

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Introdução à Programação em C

Introdução à Programação em C Introdução à Programação em C Tipos e Operadores Elementares Estruturas de Controlo Resumo Novidades em C Exemplo: Factorial Tipos de Dados Básicos Saltos Condicionais: if-then-else Valor de retorno de

Leia mais

Diagramas Sintáticos

Diagramas Sintáticos Diagramas Sintáticos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Classe pública com método main Cada classe X pública é declarada num ficheiro

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

Linguagem C: Elementos fundamentais

Linguagem C: Elementos fundamentais Instituto de C Linguagem C: Elementos fundamentais Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Tópicos Principais Variáveis e Constantes Operadores

Leia mais

4. Estruturas Fundamentais de Programação em C

4. Estruturas Fundamentais de Programação em C 4. Estruturas Fundamentais de Programação em C 4.1. Imprimindo Mensagens e Valores no Monitor de Vídeo A biblioteca de entrada e saída (stdio.h) possui a função printf que imprime mensagens e valores diretamente

Leia mais

Variáveis primitivas e Controle de fluxo

Variáveis primitivas e Controle de fluxo Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/

Leia mais

Análise Sintática - Final

Análise Sintática - Final MAB 471 2011.2 Análise Sintática - Final http://www.dcc.ufrj.br/~fabiom/comp LR(k ) vs LL(k ) Encontrando o próximo passo em uma derivação LR(k) Cada redução na análise detectável com o contexto esquerdo

Leia mais

Conceitos básicos de programação

Conceitos básicos de programação Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*

Leia mais

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo Algoritmos e Estruturas de Dados I IEC012 Linguagem C - Guia de bolso - Prof. César Melo Histórico A linguagem C é uma linguagem de programação inventada na década de 1970 por Dennis Ritchie Brian Kennigaham.

Leia mais

Introdução à Computação MAC0110

Introdução à Computação MAC0110 Introdução à Computação MAC0110 Prof. Dr. Paulo Miranda IME-USP Aula 2 Variáveis e Atribuições Memória Principal: Introdução Vimos que a CPU usa a memória principal para guardar as informações que estão

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Tratamento dos Erros de Sintaxe. Adriano Maranhão Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores

Leia mais

Linguagem C (estruturas condicionais)

Linguagem C (estruturas condicionais) Linguagem C (estruturas condicionais) André Tavares da Silva atavares@joinville.udesc.br Comandos de Controle de Fluxo Todos os comandos devem ser terminados com um ;. { e são usados para delimitar um

Leia mais

Slides trabalhados durante a quinta aula

Slides trabalhados durante a quinta aula Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page:

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ 1 O que faz Lex gera programas (em C)

Leia mais

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ 1 O que faz Lex gera programas (em C)

Leia mais

Linguagens de Programação Aula 3

Linguagens de Programação Aula 3 Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...

Leia mais

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Expressões e Definições Regulares Revisão Expressões regulares descrevem todas as linguagens que podem ser construídas

Leia mais

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

Introdução a Linguagem C. Prof. Me. Hélio Esperidião Introdução a Linguagem C Prof. Me. Hélio Esperidião Características de um programa De forma geral a maioria dos programas são compostos por dados de entrada, processamento e dados de saída. Entrada de

Leia mais

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Estruturas de Dados Módulo 4 Funções 9/8/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)

Leia mais

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30 Análise Léxica II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Setembro, 2016 1 / 30 Sumário 1 Especicação de tokens 2 Reconhecimento de tokens Ambiguidade

Leia mais

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador Estrutura de um compilador programa fonte Compiladores Análise lexical () Expressões Regulares analisador léxico analisador sintático analisador semântico análise gerador de código intermediário otimizador

Leia mais

Trabalho Linguagem e Programação de Compiladores

Trabalho Linguagem e Programação de Compiladores Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:

Leia mais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Primeiro programa em C #include int main() { int num1, num2, result; scanf("%d",&num1); scanf("%d",&num2); result = num1 + num2; printf("%d",

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Introdução à Linguagem C++

Introdução à Linguagem C++ Introdução à Linguagem C++ C++: Definição C++ C A Linguagem de Programação C++ pode ser definida como uma extensão da Linguagem C; Todo código de programação em Linguagem C pode a priori ser compilado

Leia mais

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores I Prof. Ricardo Santos (cap 1) Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve

Leia mais

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR. Compiladores I Gerson Geraldo Homrich Cavalheiro Caracterizar um método de análise bottom-up Compreender oecanismos básicos envolvidos no processo de análise LR Oferecer as bases para utilização de uma

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos

Leia mais

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton nilton@comp.uems.br Introdução A linguagem C foi inventada por Dennis Ritchie e

Leia mais

IV.2 Aspectos Léxicos Convencionais

IV.2 Aspectos Léxicos Convencionais IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos - Token genérico / Lei de formação bem definida - Limitações de tamanho e/ou valor - Possuem valor semântico o token deve ser acompanhado

Leia mais

Análise Sintática. Fabiano Baldo

Análise Sintática. Fabiano Baldo Compiladores Análise Sintática Fabiano Baldo Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais

Leia mais

Analisador Léxico parte II

Analisador Léxico parte II Analisador Léxico parte II Compiladores Mariella Berger Sumário Definições Regulares Gerador de Analisador Léxico Flex Exemplos As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais

Disciplina de Algoritmos e Programação

Disciplina de Algoritmos e Programação Disciplina de Algoritmos e Programação Aula Passada 1º Programa: olamundo.c #include // biblioteca padrão de E/S /* Programa Olá Mundo */ int main(void) { printf( Olá mundo\n ); //exibe Olá mundo

Leia mais

Estrutura de Programas e Tipos de Dados Simples

Estrutura de Programas e Tipos de Dados Simples SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Estrutura de Programas e Tipos de Dados Simples Prof. Vanderlei Bonato: vbonato@icmc.usp.br Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br

Leia mais

Identificação do discente: Matrícula: Nome completo: Douglas Godeguez Nunes. Curso: Ciência da Computação

Identificação do discente: Matrícula: Nome completo: Douglas Godeguez Nunes. Curso: Ciência da Computação Identificação do discente: Nome completo: Douglas Godeguez Nunes Matrícula: 547927 Curso: Ciência da Computação Identificação do professor-orientador: Nome completo: Maria do Carmo Garcia Noronha Curso:

Leia mais

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1 Linguagem C: Variáveis e Operadores Prof. Leonardo Barreto Campos Sumário Variáveis: Tipos de variáveis; Nome da variável; Palavras reservadas; A função printf(); A função scanf(); Variáveis locais; Variáveis

Leia mais

Introdução à Ciência da Computação scc-120

Introdução à Ciência da Computação scc-120 ICMC USP 1.semestre/2011 Introdução à Ciência da Computação scc-120 Aula : Variáveis em C Profa. Roseli Romero mailto: rafrance@icmc.sc.usp.br Slides cedidos pela profa. Renata Fortes Variáveis variáveis

Leia mais

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19 Arvores, Percursos não recursivos, Arvores heterogêneas Aula 19 Arvores binárias encadeadas Percorrer uma árvore é uma operação muito comum e seria útil encontrar um método mais eficiente para implementar

Leia mais

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Métodos Computacionais Operadores, Expressões Aritméticas e Entrada/Saída de Dados Tópicos da Aula Hoje aprenderemos a escrever um programa em C que pode realizar cálculos Conceito de expressão Tipos de

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Complexidade dos sistemas de software Estrutura Decomposição Abstração Hierarquia Projeto de sistemas complexos

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um

Leia mais

Compiladores - Análise SLR

Compiladores - Análise SLR Compiladores - Análise SLR Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Um exemplo que funciona Todo estado com um item de redução e algum outro item causa conflito LR(0)! A técnica LR(0)

Leia mais