Compiladores / YACC Professor Ariel da Silva Dias YACC. Adaptação da obra original de Tom Niemann

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

Download "Compiladores / YACC Professor Ariel da Silva Dias YACC. Adaptação da obra original de Tom Niemann"

Transcrição

1 YACC YACC Adaptação da obra original de Tom Niemann As gramáticas para yacc são descritas usando uma variante da BNF. Esta técnica, foi usada por John Backus e Peter Naur foi para descrever ALGOL60. Em uma BNF a gramática pode ser usada para expressar gramáticas livres de contexto. A maioria das construções nas modernas linguagens de programação pode ser representada pela BNF. Por exemplo, a gramática de uma expressão que multiplica e adiciona números é: 1 E -> E + E 2 E -> E * E 3 E -> id Três produções foram especificadas. Termos que aparecem no left-hand side (lhs) de uma produção, como E, são não-terminais. Termos como id (identificador) são terminais (tokens retornados por lex) e só aparecem no right-hand side (rhs) de uma produção. Essa gramática especifica que uma expressão pode ser a soma de duas expressões, o produto de duas expressões ou um identificador. Podemos usar essa gramática para gerar expressões: E -> E * E (r2) -> E * z (r3) -> E + E * z (r1) -> E + y * z (r3) -> x + y * z (r3) Em cada passo, expandimos um termo e substituímos o lado esquerdo de uma produção com o correspondente lado direito. Os números à direita indicam qual regra aplicada. Para analisar uma expressão, precisamos fazer a operação inversa. Em vez de começar com um único não-terminal (símbolo inicial) e gerar uma expressão a partir de uma gramática, precisamos reduzir uma expressão a um único não-terminal. Isso é conhecido como análise bottom-up ou shift-reduce e usa uma pilha para armazenar termos. Aqui está a mesma derivação, mas na ordem inversa: 1. x + y * z shift 2 x. + y * z reduce(r3) 3 E. + y * z shift 4 E +. y * z shift 5 E + y. * z reduce(r3)

2 6 E + E. * z shift 7 E + E *. z shift 8 E + E * z. reduce(r3) 9 E + E * E. reduce(r2) emit multiply 10 E + E. reduce(r1) emit add 11 E. accept Os termos à esquerda do ponto estão na pilha, enquanto a entrada restante está à direita do ponto. Começamos trocando fichas para a pilha. Quando o topo da pilha corresponde ao lado esquerdo de uma produção, substituímos os tokens correspondentes na pilha com o lado esquerdo da produção. Em outras palavras, os tokens correspondentes do lado direito são retirados da pilha, e o lado esquerdo da produção é empurrada na pilha. Os tokens correspondentes são conhecidos como alça e estamos reduzindo a alça ao lado esquerdo da produção. Esse processo continua até que tenhamos deslocado toda a entrada para a pilha e apenas reste os não-terminais iniciados na pilha. No passo 1, nós mudamos x para a pilha. Passo 2 aplica a regra r3 para a pilha para mudar x para E. Continuamos mudando e reduzindo até que um único não-terminal, o símbolo inicial, permaneça na pilha. Na etapa 9, quando reduzimos a regra r2, emitimos a instrução de multiplicação. Da mesma forma, a instrução add é emitida na etapa 10. Consequentemente, a multiplicação tem uma precedência maior que a adição. Considere a mudança no passo 6. Em vez de mudar, poderíamos ter reduzido e aplicar a regra r1. Isso resultaria em adição, tendo uma precedência maior do que a multiplicação. Isso é conhecido como um conflito de redução de turno. Nossa gramática é ambígua porque há mais de uma derivação possível que produzirá a expressão. Nesse caso, a precedência do operador é afetada. Como outro exemplo, associatividade na regra E -> E + E é ambíguo, pois podemos recorrer à esquerda ou à direita. Para remediar a situação, poderíamos reescrever a gramática ou fornecer ao yacc diretivas que indicam qual operador tem precedência. O último método é mais simples e será demonstrado na seção de prática. A gramática a seguir tem um conflito reduzir-reduzir. Com um id na pilha, podemos reduzir para T ou E. E -> T E -> id T -> id

3 Yacc toma uma ação padrão quando há um conflito. Para conflitos de redução de turnos, o yacc mudará. Para conflitos com redução de redução, ele usará a primeira regra na listagem. Também emite uma mensagem de aviso sempre que houver um conflito. Os avisos podem ser suprimidos, tornando a gramática não ambígua.

4 Praticando (Calculadora 1) A entrada para yacc é dividido em três seções. A seção de definições consiste em declarações de token e código C entre " %{" e " %". A gramática é colocada na seção de regras e as sub-rotinas de usuários são adicionadas na seção de sub-rotinas. Isso é melhor ilustrado pela construção de uma pequena calculadora que pode adicionar e subtrair números. Vamos começar examinando a ligação entre lex e yacc. Aqui está a seção de definições para o yacc Arquivo de entrada: %token INTEGER Esta definição declara um INTEGER token. O Yacc gera um analisador no arquivo y.tab.c e um arquivo de inclusão y.tab.h: #ifndef YYSTYPE #define YYSTYPE int #endif #define INTEGER 258 extern YYSTYPE yylval; Lex inclui este arquivo e utiliza as definições para valores de token. Para obter saída yacc chamadas yylex. A função yylex tem um tipo inteiro que retorna um token. Os valores associados ao token são retornados por lex na variável yylval. Por exemplo, [0-9]+ { yylval = atoi(yytext); return INTEGER; armazenaria o valor do inteiro yylval e retornaria o símbolo INTEGER para o yacc. O tipo de yylval é determinado por YYSTYPE. Como o tipo padrão é inteiro, isso funciona bem nesse caso. Valores de token são reservados para valores de caractere. Por exemplo, se você tivesse uma regra como [-+] return *yytext; /* return operator */ o valor do caractere para menos ou mais é retornado. Observe que colocamos o sinal de menos primeiro para que não seja confundido com um designador de intervalo. Os valores de token gerados geralmente começam em torno de 258 porque lex reserva vários valores para

5 processamento de fim de arquivo e erro. Aqui está o arquivo lex completo com especificação de entrada para nossa calculadora (calc1.l): %{ % #include "y.tab.h" #include <stdlib.h> void yyerror(char *); [0-9]+ { yylval = atoi(yytext); return INTEGER; [-+\n] return *yytext; [ \t] ; /* espaço em branco */. yyerror("caracter invalido"); int yywrap(void) { return 1; Internamente yacc mantém duas pilhas na memória; uma pilha de análise e uma pilha de valores. A pilha de análise contém terminais e nãoterminais que representam o estado de análise atual. A pilha de valores é uma matriz de elementos do tipo YYSTYPE e associa um valor a cada elemento na pilha de análise. Por exemplo quando o lex retorna um token INTEGER, o yacc desloca este token para a pilha de análise. Ao mesmo tempo, o correspondente yylval é deslocado para a pilha de valores. As pilhas de análise e valor são sempre sincronizadas, portanto, é fácil de encontrar um valor relacionado a um token na pilha. Aqui está o yacc especificação de entrada para nossa calculadora (calc1.y): %{ % #include <stdio.h> int yylex(void); void yyerror(char *); %token INTEIRO

6 program: program expr '\n' $2); ; { printf("%d\n", expr: INTEIRO { $$ = $1; expr '+' expr { $$ = $1 + $3; expr '-' expr { $$ = $1 - $3; ; void yyerror(char *s) { fprintf(stderr, "%s\n", s); int main(void) { yyparse(); return 0; A seção de regras é semelhante à gramática BNF discutida anteriormente. O lado esquerdo de uma produção, ou não-terminal, é inserido à esquerda e seguido por dois pontos. Isto é seguido pelo lado direito da produção. Ações associadas a uma regra são inseridas entre chaves. Com a recursão à esquerda, especificamos que um programa consiste em zero ou mais expressões. Cada expressão termina com uma nova linha. Quando uma nova linha é detectada, imprimimos o valor da expressão. Quando aplicamos a regra expr: expr '+' expr { $$ = $1 + $3; Nós substituímos o lado direito da produção na pilha de análise com o lado esquerdo da mesma produção. Podemos referenciar posições na pilha de valores em nosso código C especificando " $1" para o primeiro termo no lado direito da produção, " $2" para o segundo e assim por diante. " $$" designa o topo da pilha após a redução ter ocorrido. A ação acima adiciona o valor associado a duas expressões, mostra três termos da pilha de valores e retorna uma única

7 soma. Como consequência, as pilhas de análise e valor permanecem sincronizadas. Os valores numéricos são inicialmente inseridos na pilha quando reduzimos de INTEGER para expr. Depois que o INTEGER é deslocado para a pilha, aplicamos a regra expr: INTEIRO { $$ = $1; O token INTEGER é retirado da pilha de análise seguido de um deslocamento de expr. Para a pilha de valores, removemos o valor inteiro da pilha e depois o colocamos novamente. Em outras palavras, não fazemos nada. Na verdade, esta é a ação padrão e não precisa ser especificada. Finalmente, quando uma nova linha é encontrada, o valor associado expr é impresso. No caso de erros de sintaxe yacc chama a função fornecida pelo usuário yyerror. Em seguida, compile da seguinte forma para testarmos: yacc -y -d calc1.y lex calc1.l gcc -c y.tab.c lex.yy.c gcc y.tab.o lex.yy.o -o calc1.exe

8 Praticando (Calculadora 2) Nesta seção, ampliaremos a calculadora da seção anterior para incorporar algumas novas funcionalidades. Novos recursos incluem: operadores aritméticos de multiplicação e divisão. Os parênteses podem ser usados para sobrepor a precedência do operador e variáveis de caractere único podem ser especificadas em instruções de atribuição. Abaixo ilustramos a entrada de amostra e a saída da calculadora: usuario: 3 * (4 + 5) calculadora: 27 usuario: x = 3 * (4 + 5) usuario: y = 5 usuario: x calculadora: 27 usuario: y calculadora: 5 usuario: x + 2*y calculadora: 37 O analisador léxico retorna os tokens VARIABLE e INTEGER. Para variáveis, yylval especifica um índice para a tabela de símbolos sym. Para este programa, sym apenas contém o valor da variável associada. Quando osinteger tokens são retornados, yylvalcontém o número digitalizado. Aqui está a especificação de entrada para lex (calc2.l): %{ % #include <stdlib.h> #include "y.tab.h" void yyerror(char *); /* variaveis */ [a-z] { yylval = *yytext - 'a'; return VARIAVEL; /* inteiros */ [0-9]+ { yylval = atoi(yytext); return INTEIRO;

9 /* operadores */ [-+()=/*\n] { return *yytext; /* espaço */ [ \t] ; /* qualquer outro caracter será um erro */. yyerror("caracter Inválido"); int yywrap(void) { return 1; A especificação de entrada para yacc segue. Os tokens para INTEGER e VARIABLE são utilizados por yacc para criar #defines em y.tab.h para uso em lex. Isto é seguido por definições para os operadores aritméticos. Podemos especificar %left, para associativo à esquerda ou %right para associativa à direita. A última definição listada tem a maior precedência. Consequentemente, multiplicação e divisão têm maior precedência do que adição e subtração. Todos os quatro operadores são associativos à esquerda. Usando esta técnica simples, podemos desambiguar nossa gramática (calc2.y). %token INTEIRO VARIAVEL %left '+' '-' %left '*' '/' %{ % void yyerror(char *); int yylex(void); int sym[26]; program: program statement '\n' ; statement: expr { printf("%d\n", $1); VARIAVEL '=' expr { sym[$1] = $3;

10 ; expr: INTEIRO VARIAVEL { $$ = sym[$1]; expr '+' expr { $$ = $1 + $3; expr '-' expr { $$ = $1 - $3; expr '*' expr { $$ = $1 * $3; expr '/' expr { $$ = $1 / $3; '(' expr ')' { $$ = $2; ; void yyerror(char *s) { fprintf(stderr, "%s\n", s); int main(void) { yyparse(); return 0; Agora vamos criar a nossa calculadora: yacc -y -d calc2.y lex calc2.l gcc -c y.tab.c lex.yy.c gcc y.tab.o lex.yy.o -o calc2.exe

11 Praticando (Calculadora 3) Esta versão da calculadora é substancialmente mais complexa que as versões anteriores. As principais alterações incluem: instruções de controle, como if-else e while. Além disso, uma árvore de sintaxe é construída durante a análise. Após a análise, percorremos a árvore sintática para produzir a saída. Três versões da rotina de caminhada na árvore são fornecidas: um intérprete que executa declarações durante a caminhada na árvore um compilador que gera código para uma máquina baseada em pilha hipotética uma versão que gera uma árvore de sintaxe do programa original. Para tornar as coisas mais concretas, aqui está um exemplo de programa que pode ser reconhecido pela nossa calculadora, x = 0; while (x < 3) { print x; x = x + 1; com saída para uma versão interpretativa, uma versão do compilador, push 0 pop x L000: push x push 3 complt jz L001 push x print push x push 1 add pop x jmp L000

12 L001: e uma versão que gera uma árvore de sintaxe. Graph 0: [=] ---- id(x) c(0) Graph 1: while [<] [;] id(x) c(3) print [=] id(x) id(x) [+] ---- id(x) c(1) O arquivo de inclusão contém declarações para a árvore de sintaxe e a tabela de símbolos. A tabela de símbolos (sym) permite nomes de variáveis de um único caractere. Um nó na árvore de sintaxe pode conter uma constante (connodetype), um identificador (idnodetype) ou um nó interno com um operador (oprnodetype). Uma união encapsula todas as três variantes. O nodetype.type é usada para determinar qual estrutura nós temos. O arquivo de entrada lex contém padrões para os tokens VARIAVEL e INTEIRO. Além disso, os tokens são definidos para operadores de 2 caracteres, como EQ e NE. Operadores de caractere único são simplesmente retornados como eles mesmos. O arquivo de entrada do YACC define YYSTYPE, o tipo de yylval, como

13 %union { int ivalue; /* valor inteiro */ char sindex; /* índice da tabela de simbolo */ nodetype *nptr; /* nó ponteiro */ ; Isso faz com que o seguinte seja gerado em y.tab.h: typedef union { int ivalue; /* valor inteiro */ char sindex; /* índice da tabela de simbolo */ nodetype *nptr; /* nó ponteiro */ YYSTYPE; extern YYSTYPE yylval; Constantes, variáveis e nós podem ser representados por yylval na pilha de valores do analisador. Uma representação mais precisa de inteiros decimais é dada abaixo. Isso é semelhante a C/C++ onde inteiros que começam com 0 são classificados como octal. 0 { yylval.ivalue = atoi(yytext); return INTEIRO; [1-9][0-9]* { yylval.ivalue = atoi(yytext); return INTEIRO; Observe as definições de tipo %token <ivalue> INTEIRO %type <nptr> expr Isso liga expr a nptr, e a união com INTEIRO e ivalue na YYSTYPE. Isso é necessário para que yacc possa gerar o código corretamente. Por exemplo, a regra expr: INTEGER { $$ = con($1); deve gerar o código a seguir. Observe que yyvsp[0] corresponde ao topo da pilha de valores ou o valor associado ainteger.

14 yylval.nptr = con(yyvsp[0].ivalue); O operador menos unário recebe maior prioridade que os operadores binários da seguinte maneira: %left GE LE EQ NE '>' '<' %left '+' '-' %left '*' '/' %nonassoc UMINUS O %nonassoc indica que não há associatividade implícita. É frequentemente usado em conjunto com %prec para especificar a precedência de uma regra. Assim, nós temos expr: '-' expr %prec UMINUS { $$ = node(uminus, 1, $2); indicando que a precedência da regra é a mesma que a precedência do token UMINUS. E UMINUS (conforme definido acima) tem precedência mais alta que os outros operadores. Uma técnica semelhante é usada para remover a ambiguidade associada à instrução if-else. A árvore de sintaxe é construída de baixo para cima, alocando os nós folha quando variáveis e números inteiros são reduzidos. Quando os operadores são encontrados, um nó é alocado e os ponteiros para estes nós são inseridos como operandos. Depois que a árvore é construída, a função ex é chamada para fazer uma caminhada em profundidade da árvore de sintaxe. Isso resulta em operadores sendo aplicados na ordem em que foram encontrados durante a análise. Temos três versões para o ex: uma versão interpretativa uma versão do compilador uma versão que gera uma árvore de sintaxe Os arquivos deste projeto (Calculadora 1, Calculadora 2 e Calculadora 3) estão anexos no site na disciplina de Compiladores.

15 Referência Niemann, Tom. Lex & YACC. Disponível em: epaperpress.com.

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison Ferramentas Flex/Bison Prof. Sergio F. Ribeiro Lex e Yacc / Flex e Bison São ferramentas de auxílio na escrita de programas que promovem transformações sobre entradas estruturadas. São ferramentas desenvolvidas

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

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

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas 2018.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

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

Lex Adaptação da obra original de Tom Niemann

Lex Adaptação da obra original de Tom Niemann LEX Lex Adaptação da obra original de Tom Niemann Durante a primeira fase, o compilador lê a entrada e converte as strings na origem para os tokens. Com expressões regulares, podemos especificar padrões

Leia mais

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL: INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe

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

Compiladores - JACC. Fabio Mascarenhas

Compiladores - JACC. Fabio Mascarenhas Compiladores - JACC Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JACC Gerador de analisadores sintáticos LALR que gera código Java Sintaxe baseada na sintaxe do YACC (e de muitos outros

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

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti. Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo

Leia mais

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

Linguagens e Programação BISON. Paulo Proença Linguagens e Programação BISON 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)

Leia mais

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

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42 Análise Sintática I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2017 1 / 42 Sumário 1 Introdução 2 Derivações 3 Ambiguidade 4 Análise sintática descendente

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

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

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

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

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

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

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02 Programação 1 Atribuição, operadores aritméticos, entrada de dados Técnico em Eletrônica Semestre 5 02 Armazenando na memória tipo de variável #include #include main() { int ano; Declaração

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 - 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

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática Ambiguidade Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática De maneira equivalente, se existe mais de uma derivação mais à esquerda para uma cadeia Ou se

Leia mais

1 d=

1 d= 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/ Flex: versão livre http://simplesamples.info/c++/flex.php

Leia mais

Processamento de Linguagens I LESI + LMCC (3 o ano)

Processamento de Linguagens I LESI + LMCC (3 o ano) Processamento de Linguagens I LESI + LMCC (3 o ano) 3 o Ficha Prática Ano Lectivo de 05/06 1 Objectivos Este ficha prática contém 1 exercício para ser resolvido nas aulas teórico-práticas com vista a consolidar

Leia mais

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados Disciplina de Programação de Computadores I Universidade Federal de Ouro

Leia mais

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C Operadores aritméticos Operadores Unários (um só operando) Incremento

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

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

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR) Compilação: Erros Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão * Analisadores Botton-Up: - Shift-Reduce (SLR) * Erros no Lex * Erros no Yacc * Erros na Definição da

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp Ambiguidade Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática De maneira

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

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa

Leia mais

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

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18 Análise Sintática Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 18 Sumário 1 Introdução 2 Derivações 2 / 18 1 Introdução 2 Derivações 3 /

Leia mais

Linguagem C Operadora

Linguagem C Operadora Linguagem C Operadora Objetivos Abordar os conceitos sobre os Operadores demonstrando o seu uso com exemplos para um melhor aprendizado. Operadores Os operadores indicam ao compilador a necessidade de

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

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

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio

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

Linguagem C Operadores

Linguagem C Operadores Linguagem C Operadores Objetivos Abordar os conceitos sobre os Operadores demonstrando o seu uso com exemplos para um melhor aprendizado. Pré-requisitos É necessário que o leitor tenha acompanhado o artigo

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

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

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

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

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

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

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem

Leia mais

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) 1 LINGUAGENS Conhecida pelo PROCESSADOR Conhecida pelo Usuário COMPILADOR LINGUAGEM DE ALTO NÍVEL LINGUAGEM ASSEMBLY 2 INSTRUÇÕES EM ASSEMBLY Para programar

Leia mais

Introdução. Flex e uma ferramenta para gerar scanners programas que reconhecem padrões lexicais em texto

Introdução. Flex e uma ferramenta para gerar scanners programas que reconhecem padrões lexicais em texto Compiladores Flex Introdução Flex e uma ferramenta para gerar scanners programas que reconhecem padrões lexicais em texto O flex lê o arquivo de entrada fornecido, para uma descrição de um scanner a ser

Leia mais

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática Capítulo 1: Introdução à Linguagem C Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso caso, a linguagem C.

Leia mais

Conceitos Básicos de Programação

Conceitos Básicos de Programação BCC 201 - Introdução à Programação Conceitos Básicos de Programação Guillermo Cámara-Chávez UFOP 1/53 Conceitos básicos I Variável 2/53 Conceitos básicos II Posição de memoria, identificada através de

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

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

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

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

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

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

Python e sua sintaxe LNCC UFRJ

Python e sua sintaxe LNCC UFRJ Python e sua sintaxe LNCC UFRJ Linguagens naturais e formais Linguagens naturais Linguagem formal Um conjunto finito e não-vazio cujos elementos são símbolos Qualquer cadeia finita de símbolos justapostos

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação CP41F Operadores aritméticos. Operadores lógicos. Operadores binários. Aula 7 Prof. Daniel Cavalcanti Jeronymo Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia de

Leia mais

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:

Leia mais

Linguagens de Programação

Linguagens de Programação 45 Linguagens de Programação O paradigma de programação imperativo está diretamente atrelado à arquitetura básica dos computadores sobre os quais os programas eram executados. Boa parte dos computadores

Leia mais

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP)

CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) CONJUNTO DE INSTRUÇÕES DE UM PROCESSADOR (UCP) 1 LINGUAGENS Constituída de seqüência de zeros (0) e uns (1) Cada instrução em ASSEMBLY constitui-se em um mnemônico (uma forma fácil de se lembra) de uma

Leia mais

Princípios de Desenvolvimento de Algoritmos MAC122

Princípios de Desenvolvimento de Algoritmos MAC122 Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Aula de Revisão: Variáveis e Atribuições Introdução Memória Principal: Vimos no curso anterior que a CPU usa a memória

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada

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

4. Constantes. Constantes pré-definidas

4. Constantes. Constantes pré-definidas 4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.

Leia mais

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

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

Leia mais

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa Computação Eletrônica Tipos de dados, constantes, variáveis, operadores e expressões Prof: Luciano Barbosa Site da disciplina: www.cin.ufpe.br/~if165/ Recapitulando num cubo = n * n * n cubo Algoritmo

Leia mais

V.2 Especificação Sintática de Linguagens de Programação

V.2 Especificação Sintática de Linguagens de Programação V.2 Especificação Sintática de Linguagens de Programação Deve ser baseada: No planejamento da Linguagem / Compilador Objetivos, Filosofia, Potencialidades,... Nos critérios de projeto/avaliação Legibilidade,

Leia mais

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados

Linguagem de Programação I. Aula 06 Linguagem C: Tipos de Dados Linguagem de Programação I Aula 06 Linguagem C: Tipos de Dados Da Aula Anterior Linguagens de Programação A Linguagem C: Como tudo começou Principais características da Linguagem C O primeiro programa

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

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues SEL0433 Aplicação de Microprocessadores I Revisão da Linguagem C Prof. Evandro L. L. Rodrigues Estrutura de um programa C Diretivas de pré processamento Declaração de variáveis globais Declaração de protótipos

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

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Introdução à Programação Operadores, Expressões Aritméticas e Entrada/Saída de Dados Programa em C #include int main main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius

Leia mais

Construção de Compiladores Aula 2 - Analisador Léxico

Construção de Compiladores Aula 2 - Analisador Léxico Construção de Compiladores Aula 2 - Analisador Léxico Bruno Müller Junior Departamento de Informática UFPR 8 de Agosto de 2014 1 Analisador Léxico 2 3 Método 1: Programa 4 Código Analisador Léxico 5 Método

Leia mais

Análise Sintática Bottom-up

Análise Sintática Bottom-up MAB 471 2011.2 Análise Sintática Bottom-up http://www.dcc.ufrj.br/~fabiom/comp Recapitulando parsers top-down Constróem árvore sintática da raiz até as folhas Recursão à esquerda faz parsers entrarem em

Leia mais

Linguagens de Programação. Marco A L Barbosa

Linguagens de Programação. Marco A L Barbosa Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

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

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

Compiladores 02 Analise léxica

Compiladores 02 Analise léxica Compiladores 02 Analise léxica Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos Relembrando O compilador é dividido em duas etapas Análise Síntese Análise

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Capítulo 2 Operadores. A função scanf()

Capítulo 2 Operadores. A função scanf() Capítulo 2 Operadores A função scanf() A função scanf() é outra das funções de E/S implementadas em todos os compiladores e nos permite ler dados formatados da entrada padrão (teclado). Sintaxe: scanf(

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Regras Léxicas Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem como a maneira que eles podem ser combinados; Exemplo Pascal: letras maiúsculas

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

CONJUNTO DE INSTRUÇÕES

CONJUNTO DE INSTRUÇÕES CONJUNTO DE INSTRUÇÕES 1 CARACTERÍSTICAS DE INSTRUÇÕES DE MÁQUINA Quando um programador usa uma linguagem de alto-nível, como C, muito pouco da arquitetura da máquina é visível. O usuário que deseja programar

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

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

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos

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

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica Descrevendo a Sintaxe e a Semântica Cristiano Lehrer Introdução Descrição, compreensível, de uma linguagem de programação é difícil e essencial. Capacidade de determinar como as expressões, instruções

Leia mais

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Introdução à Programação em C Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Linguagem C Criada em 1972 para uso no LINUX; Sintaxe base para diversas outras (Java, JavaScript, PHP, C++,

Leia mais

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação Compiladores Analisador Sintático Prof. Antonio Felicio Netto antonio.felicio@anhanguera.com Ciência da Computação 1 Análise Sintática - A Análise Sintática constitui a segunda fase de um tradutor de uma

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas

Leia mais

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Sabemos construir algoritmos que tenham: Variáveis Comandos sequenciais Entrada e saída

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

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 04 Prof. geovanegriesang@unisc.br Data Conteúdo 23/09/2013 3. Análise Sintática: 3.1 analisadores

Leia mais