Linguagens e Programação BISON. Paulo Proença
|
|
- Cármen Madureira Belmonte
- 6 Há anos
- Visualizações:
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
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 maisCompiladores. 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 maisUm 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 maisA 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 maisLicenciatura 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 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 maisConceitos 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 maisAná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 maisIntroduçã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 maisLegibilidade 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 maisPROGRAMAÇÃ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 maisAná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 maisLinguagem 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 maisConstruçã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 maisLinguagem 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 maisIntroduçã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 maisINF1007: 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 maisAná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 maisHello 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 maisProgramaçã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 maisFACULDADE 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 maisLinguagens 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 maisK&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 maisIntroduçã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 maisUniversidade 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 maisArgumentos 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 maisCompiladores. 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 maisLINGUAGEM 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 maisA 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 maisAmbiente 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 maisComputaçã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 maisLinguagens 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 maisLinguagem 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 maisAnhanguera 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 maisEstruturas 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 maisIntroduçã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 maisConceitos 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 maisControlo 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 maisAula 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 maisIntroduçã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 maisEntender 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 maisFunçã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 maisLinguagens 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 maisCompiladores - 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 maisLinguagem 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 maisCompiladores 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 maisNotaçõ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 maisIntroduçã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 maisIntroduçã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 maisCOMPILADORES. 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 maisAná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 maisIntroduçã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 maisUniversidade 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 maisIntroduçã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 maisDiagramas 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 maisCAP. 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 maisLinguagem 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 mais4. 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 maisVariá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 maisAná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 maisConceitos 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 maisAlgoritmos 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 maisIntroduçã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 maisProgramaçã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 maisTratamento 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 maisLinguagem 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 maisSlides 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 maisLinguagens 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 maisO 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 maisUtiliza 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 maisLinguagens 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 maisCompiladores 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 maisIntroduçã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 maisEstruturas 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 maisAná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 maisCompiladores. 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 maisTrabalho 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 maisLÓ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 maisTipos, 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 maisTipos, 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 maisIntroduçã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 maisCompiladores 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 maisCompiladores 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 maisALGORITMOS 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 maisUniversidade 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 maisIV.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 maisAná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 maisAnalisador 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 maisCompiladores - 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 maisDisciplina 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 maisEstrutura 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 maisIdentificaçã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 maisLinguagem 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 maisIntroduçã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 maisArvores, 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 maisMé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 maisCarlos 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 maisComo 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 maisCompiladores - 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