Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 29 de Março de 2010

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

Download "Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 29 de Março de 2010"

Transcrição

1 Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 29 de Março de 2010 Classificação mínima no projecto: 9,50 valores (sem arredondamentos) (40% da nota final). Fraudes na execução do projecto terão como resultado a classificação de 0 (zero) valores e consequente reprovação no ano lectivo 2009/2010, sem prejuízo de outras acções disciplinares pelos órgãos do IST. Datas: 2010/05/03 12:00 (entrega intermédia); 2010/05/31 12:00 (entrega final); 2010/06/ /06/17 (teste prático). Dúvidas que não possam ser esclarecidas presencialmente ou através do material no Fénix, devem ser colocadas através de correio electrónico (ver ereço no Fénix). Adverte-se contra o uso de fontes de informação não oficiais. Este documento não descreve a linguagem formalmente, preferindo-se uma exposição intuitiva (em português). 1 Introdução A linguagem Pipoca é imperativa, não estruturada e fortemente tipificada. Um dos objectivos da linguagem é permitir a fácil leitura, pelo que é fortemente restritiva relativamente ao aspecto e à posição do código nas linhas (indentação). 1.1 Tipos de dados manipuláveis Números inteiros Designados por int, ocupam 4 bytes em complemento para dois, alinhados a 32 bits. Quando se omite o tipo, em situações onde é normalmente necessário, assume-se o tipo inteiro (ver abaixo). Números reais Designados por real, ocupam 8 bytes em vírgula flutuante (norma IEEE 754). Cadeias de caracteres Designadas por string, são terminadas pelo carácter ASCII 0x00 (NULL). As contantes e literais deste tipo podem ser utilizados em atribuições, passados como argumentos de funções ( 6) e em impressões ( 8.12). Vectores São sempre homogéneos (contêm valores de um só tipo: inteiro ou real), e.g., quando um vector inclui pelo menos um valor literal real, todo os elementos do vector são reais. Os valores inteiros e reais são considerados vectores unidimensionais, so o escalares interpretados como vectores de dimensão unitária. 1.2 Verificação de tipos Os tipos suportados por cada operador e a operação a realizar são indicados na definição das expressões ( 8). 1.3 Manipulação de nomes As entidades nomeadas ( 2.3) correspondem a constantes ( 4.1), variáveis ( 4.2) e funções ( 6). Usa-se o termo entidade para as designar indiscriminadamente, explicitando-se quando a descrição for válida apenas para um subconjunto Espaços de nomes O espaço de nomes global é único: um nome utilizado para designar uma entidade num dado contexto não pode ser utilizado para designar outras (ainda que de natureza diferente) Validade das variáveis As entidades globais (declaradas fora de qualquer função), existem durante toda a execução do programa. As constantes e variáveis locais a uma função, bem como os seus argumentos formais, existem apenas enquanto ela está activa. 1

2 1.3.3 Visibilidade dos identificadores Os identificadores são visíveis desde a sua declaração até ao fim do seu alcance: ficheiro (globais) ou função/bloco (locais). A reutilização de um identificador num contexto inferior encobre possíveis declarações em contextos superiores. Em particular, a redeclaração de um identificador numa função encobre o global até ao fim da função. Não é possível definir funções dentro de funções. Existem algumas restrições à declaração de identificadores cujos nomes coincidam com outros já utilizados ( 6.3). 2 Convenções Lexicais Existem seis grupos de elementos lexicais (tokens): estrutura de linha, identificadores, palavras chave, literais, operadores de expressões e delimitadores. Considera-se sempre a maior sequência de caracteres correspondente a um elemento lexical válido. 2.1 Estrutura de linha Um programa está dividido em linhas lógicas e uma instrução não pode ocupar mais de uma linha lógica, excepto se a instrução permitir explicitamente mudanças de linha através, por exemplo, da utilização de blocos. Uma linha lógica pode ser constituída por uma ou mais linhas físicas separadas pelo carácter de continuação Linhas físicas A terminação de uma linha física depe da convenção utilizada pelo sistema operativo de suporte utilizado. Assim, em UNIX, o carácter utilizado é o ASCII 0x0A (linefeed, \n). No Macintosh, o carácter utilizado é o ASCII 0x0D (return, \r). Em DOS/Windows, utiliza-se a sequência ASCII 0x0D 0x0A (\r\n) Carácter de continuação: junção explícita de linhas Duas linhas físicas podem ser juntas numa única linha lógica através da utilização do carácter de continuação: ASCII 0x5C (backslash, \), quando utilizado como último carácter, imediatamente antes da terminação da linha física. Este processo é válido para múltiplas linhas físicas. Por exemplo: if ano > 2006 and ano <= 2010 and dia >= 1 \ and (mes = 1 or mes = 3 or mes = 5 or mes = 7 \ or mes = 8 or mes = 10 or mes = 12 and dia <= 31) \ or (mes = 4 or mes = 6 or mes = 9 or mes = 11 and dia <= 30 )\ or mes = 8 or mes = 10 or mes = 12 and dia <= 31) \ or mes = 2 and (ano = 2008 and dia <= 29 or ano <> 2008 \ and dia <= 28 ) then dia correcto!! dia errado!! Além da utilização descrita, o carácter de continuação pode ser utilizado em cadeias de caracteres literais ( 2.5.3), so ilegal em qualquer outro contexto. Em particular, o carácter de continuação não pode ser utilizado para permitir a continuação de tokens (identificadores, palavras chave, delimitadores, operadores, literais inteiros ou reais), nem comentários explicativos ( 2.2) Caracteres brancos São considerados caracteres brancos aqueles que, embora servindo para separar os elementos lexicais, não representam nenhum elemento lexical. São considerados caracteres brancos: ASCII 0x20 (espaço, ) e ASCII 0x09 (tabulação, \t). Note-se que os caracteres mencionados acima, apesar de brancos, têm significado especial se aparecerem no início de uma linha lógica ( 2.1.5). Analogamente, os caracteres de mudança de linha ( 2.1.1) também têm significado especial ( e 2.1.5) Linhas brancas Uma linha lógica que contenha apenas caracteres brancos ( 2.1.3) e comentários é ignorada. Neste caso não é gerado nenhum elemento lexical nem alterada a indentação. 2

3 2.1.5 Indentação Tal como mencionado em 2.1.3, os caracteres ASCII 0x20 (espaço, ) e ASCII 0x09 (tabulação, \t) não são considerados brancos no início de uma linha lógica. Neste caso, as suas cadeias determinam o nível de indentação do código. Os caracteres de tabulação são substituídos (da esquerda para a direita) por 1 (um) a 8 (oito) espaços, de tal forma que o número total de caracteres brancos até ao carácter corrente (e incluindo este) seja o múltiplo de 8 seguinte (regra utilizada pelo UNIX). O número total de espaços brancos até ao primeiro carácter não branco determina o nível de indentação da expressão. A indentação não pode continuar na linha física seguinte mediante a utilização de uma junção explícita de linhas. Assim, no máximo, o número de espaços brancos até ao primeiro carácter de continuação determina o nível de indentação, embora as linhas físicas possam ter qualquer comprimento. Embora os diversos níveis de indentação possam ser diferentes, o significado pode ser o mesmo (ver figura 1). (a) OK: bom estilo (b) OK: mau estilo (c) Errado! max(a, b) if a > b then a b max(a, b) if a > b then a b max(a, b) if a > b then a b Figura 1: O código de (a) apresenta melhor legibilidade que o de (b), devido à regularidade da indentação. 2.2 Comentários Os comentários funcionam como separadores de elementos lexicais. Existem dois tipos de comentários. Explicativos Começam com # (se não fizer parte de uma cadeia de caracteres), e acabam no fim da linha física ( 2.1.1). Operacionais Começam com { e terminam com } (se não fizerem parte de cadeias de caracteres). Podem estar aninhados e conter várias linhas físicas ( 2.1.1). Não alteram a indentação ( 2.1.5). 2.3 Identificadores Os identificadores, ou nomes ( 1.3), são iniciados por uma letra (maiúscula ou minúscula) ou um sublinhado (_). O primeiro carácter é seguido por 0 (zero) ou mais letras, dígitos ou _. O número de caracteres de um identificador é ilimitado e dois nomes designam identificadores distintos se houver alteração de maiúscula para minúscula, ou vice-versa, de pelo menos um carácter. 2.4 Palavras chave As seguintes palavras chave estão reservadas, não podo ser utilizadas como identificadores. Estas palavras têm de ser escritas exactamente como indicado. Apesar de definida, goto não é utilizada pela linguagem. not and or if then while do done until break continue return goto real integer string const var init extern 2.5 Literais São notações para valores constantes de alguns tipos da linguagem (não confundir com constantes ( 4.1), i.e., identificadores que designam elementos cujo valor não pode sofrer alterações durante a execução do programa). 3

4 2.5.1 Inteiros Um literal inteiro é um número não negativo (uma constante inteira pode, contudo, ser negativa: números negativos são construídos pela aplicação do operador menos unário (-) a um literal positivo). Os inteiros ocupam 32 bits. Um literal inteiro em decimal é constituído por uma sequência de 1 (um) ou mais dígitos decimais (de 0 a 9) em que o primeiro dígito não é um 0 (zero), excepto no caso do número 0 (zero). Neste caso, é composto apenas pelo dígito único 0 (zero) (em qualquer base de numeração). Um literal inteiro em octal começa sempre pelo dígito 0 (zero), so seguido de um ou mais dígitos de 0 a 7. Um literal inteiro em hexadecimal começa pela sequência 0x, so seguido de um ou mais dígitos de 0 a 9, de a a f, ou de A a F (elementos da base hexadecimal). Se não for possível representar o literal inteiro em 32 bits, devido a um overflow, deverá ser gerado um erro lexical Reais Um literal real é representado em notação científica e ocupa 64 bits. Um literal real inclui sempre um ponto decimal e tem dígitos decimais de um dos lados (podo não ter do outro). Assim, 2. ou 2.0 representam o valor real 2 (dois), enquanto duas décimas podem ser representadas por.2 ou 0.2. Um literal real pode ainda incluir uma parte exponencial contituída pela letra E (ou e) seguida de um inteiro (positivo ou negativo) Cadeias de caracteres As cadeias de caracteres começam e terminam com plicas ( ). Uma cadeia de caracteres pode conter qualquer número de caracteres, podo estes ser ASCII ou de outras normas (e.g. ISO , entre outros), para representação de caracteres acentuados. Dentro de uma cadeia, os caracteres utilizados para iniciar ou terminar comentários (tanto { e }, como #), têm o seu valor normal, não inciando ou terminando qualquer comentário ( 2.2). O carácter \ é utilizado na representação de caracteres especiais de acordo com a seguinte tabela: \ seguido de ASCII 0x0A (newline) ignorado (ver junção de linhas físicas, 2.1.1) \\ \ (backslash) \ (plica) \n ASCII 0x0A (LF, linefeed) \r ASCII 0x0D (CR, carriage return) \t ASCII 0x09 (HT, tab) \b ASCII 0x07 (BEL, bell) \ooo carácter com valor octal dado pelos dígitos ooo \xhh carácter com valor hexadecimal dado pelos dígitos hh (outras sequências) permanecem inalteradas (incluindo o carácter \) A sequência octal, especificada por ooo, pode ter 1, 2, ou 3 dígitos, com valores entre 1 e 377 (máximo representável com 8 bits). Analogamente, a sequência hexadecimal, especificada por hh, pode ter 1 ou 2 dígitos, com valores entre 1 e FF (máximo representável com 8 bits). Tal como nos inteiros ( 2.5.1), não há distinção entre maiúsculas e minúsculas nos dígitos hexadecimais. 2.6 Operadores de expressões São considerados operadores os seguintes elementos lexicais: * / % ** < <= >= > = <> := 2.7 Delimitadores Os elementos lexicais seguintes são considerados delimitadores: [ ] ( ), 4

5 3 Estrutura 3.1 Gramática A gramática da linguagem pode ser resumida pelas regras abaixo. Considerou-se que os elementos em tipo fixo são literais, que os parênteses curvos agrupam elementos, que elementos alternativos são separados por uma barra vertical, que elementos opcionais estão entre parênteses rectos, que os elementos que se repetem zero ou mais vezes estão entre { e }. Notar que, em reserva e em literal-vector, os parênteses rectos são elementos lexicais da linguagem. ficheiro declaração { declaração } declaração constante variável função constante const identificador {, identificador } := literal {, literal } variável variável-i variável-ni variável-i init identificador := expressão variável-ni var [ tipo ] identificador tipo integer real string função [ tipo ] identificador ( [ argumentos ] ) [ bloco ] argumentos [ tipo ] identificador {, [ tipo ] identificador } literal literal-atómico literal-vector literal-atómico literal-inteiro literal-real cadeia-de-caracteres literal-vector [ literal-atómico {, literal-atómico } ] instrução if expressão then instrução [ instrução ] while expressão do instrução [ instrução ] done do instrução until expressão [ instrução ] done continue [ literal-inteiro ] break [ literal-inteiro ] return bloco expressão reserva reserva [ identificador ] := expressão Foram omitidos da gramática os seguintes elementos: tipo ( 1.1); identificador ( 2.3); literal-inteiro ( 2.5.1); literal-real ( 2.5.2); cadeia-de-caracteres ( 2.5.3); bloco ( 7.2); e expressão (incluindo left-values, i.e., posições de memória para escrita) ( 8). 3.2 Ficheiros Os ficheiros são contituídos por sequências de definições. Estas definições são utilizadas, quer para declarar, quer para reservar espaço para os valores das entidades declaradas. É possível declarar constantes ( 4.1), variáveis ( 4.2) e funções ( 6). Os ficheiros são uniformes, so o principal aquele que contiver a função de arranque do programa, designada por start. 4 Declaração de Variáveis e Constantes 4.1 Constantes Designadas pela palavra chave const, indicam identificadores cujo valor não pode ser modificado. As contantes podem ser de qualquer tipo. Como a inicialização é obrigatória, não é necessária (ou permitida) a especificação do tipo de dados (é inferido do valor). A inicialização pode ser múltipla, so usados múltiplos identificadores e valores iniciais (separados por vírgulas em ambos os casos). Os identificadores e os valores devem ser em igual número e são emparelhados. Numa expressão, caso um identificador designe uma constante escalar o seu valor deverá ser directamente substituído no código. const grosa := 144 const pi := const valores := [ 1, 2.4, 3.6, 5 ] const dias, horas, minutos, segundos := 7, 24, 60, 60 const mes, dias := Abril, 30 5

6 4.2 Variáveis Variáveis iniciadas Designadas pela palavra chave init, indicam variáveis com valores iniciais. O inicializador é uma sequência de valores separados por vírgulas e delimitados por parênteses rectos (excepto para cadeias de caracteres). Como a inicialização é obrigatória, não é necessária (ou permitida) a especificação do tipo (é inferido do valor). Todos os valores são considerados vectores (os escalares são vectores com um só elemento). Cada instrução inicia uma variável: para iniciar várias variáveis são necessárias outras tantas instruções. A sequência de valores iniciais apenas pode conter literais. init meses := [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] init dias := [ 365 ] init nome := Gollum Note-se que uma variável denota sempre uma posição de memória, logo dias + 1 = 366 é uma condição verdadeira e equivalente a dias[0] + 1 = 366 (i.e., é possível indexar qualquer variável). A inicialização de uma cadeia de caracteres corresponde à definição de uma variável cujo valor é o ereço inicial da cadeia. O conteúdo da cadeia é constante Variáveis não iniciadas Variáveis escalares não iniciadas são designadas com a palavra chave var seguida de um tipo e uma sequência de identificadores separados por vírgulas. var dias, horas var integer minutos, segundos var real comprimento, altura A dimensão das variáveis não iniciadas não escalares (vectores) é indicada entre parênteses rectos. Se a dimensão for omitida, a reserva de memória deve ser efectuada pela operação de reserva de memória ( 7.8). var pilha[20], aux[] var real coordenadas[3] 5 Declarações exteriores A declaração de entidades exteriores só pode ser efectuada fora das funções. A definição de entidades exteriores começa com a palavra chave extern seguida de uma declaração, necessariamente não inicializada, mesmo no caso das constantes ou no caso de inicializações de variáveis noutros módulos (neste caso, pode ser necessária a especificação do tipo). Esta declaração permite a utilização de compilação separada. 6 Funções Uma função permite agrupar um conjunto de instruções num corpo, que é executado com base num conjunto de parâmetros (os argumentos formais) quando é invocada a partir de uma expressão. O programa tem início na função com nome start. 6.1 Declaração As funções que recebam argumentos devem indicá-los no cabeçalho. Funções sem argumentos definem um cabeçalho vazio. A declaração de uma função sem corpo tipifica um identificador exterior ou efectua uma declaração antecipada (para pré-declarar funções que sejam usadas antes da definição, por exemplo, entre duas funções mutuamente recursivas). Caso a declaração tenha corpo, define-se uma nova função. Para o mesmo nome, pode existir apenas uma declaração com corpo. Múltiplas declarações sem corpo com o mesmo nome são possíveis, mas têm de concordar nos tipos do retorno e dos argumentos. Todas as funções devem indicar o tipo de retorno (por omissão, inteiro). Quando invocadas devolvem um valor do tipo indicado. 6

7 6.2 Invocação Uma função só pode ser invocada através de um identificador que refira uma função previamente declarada. Caso existam argumentos, na invocação da função, o seu identificador é seguido de uma lista de expressões delimitadas por parênteses curvos. A lista de expressões é uma sequência, possivelmente vazia, de expressões separadas por vírgulas. As expressões são avaliadas da direita para a esquerda antes da invocação da função (convenção Cdecl) e cada valor resultante passado por cópia (passagem de argumentos por valor). O número e tipo de parâmetros actuais deve ser igual ao número e tipo dos parâmetros formais da função invocada (i.e., não existem parâmetros opcionais). A ordem dos parâmetros actuais deverá ser a mesma dos argumentos formais. Os parâmetros actuais devem ser colocados na pilha de dados pela ordem inversa da sua declaração e o ereço de retorno no topo da pilha. A função chamadora coloca os argumentos na pilha e é também responsável pela sua remoção, após o retorno da função chamada (Cdecl). Ainda de acordo com esta convenção, a passagem de retorno que não é possível colocar num registo é feita por referência passada como o primeiro argumento (i.e., o chamador reserva o espaço necessário e envia a localização à função invocada). 6.3 Corpo O valor devolvido por uma função, definido através do left-value especial que tem o mesmo nome da função, deve ser do tipo declarado. Podem ser realizadas várias atribuições durante a vida da função, so retornado o valor existente quando a função termina. O nome da variável de retorno é reservado na função correspondente, não podo ser reutilizado como variável local ou nome de um argumento. Os nomes das variáveis (ao corpo da função) não podem ser iguais aos dos argumentos da função. Uma instrução return causa a interrupção imediata da função, assim como a devolução do valor de retorno ao chamador. 6.4 Função principal e execução de programas Um programa inicia-se com a invocação da função start (sem argumentos). Os argumentos com que o programa foi chamado podem ser obtidos através de funções argc() (devolve o número de argumentos); string argv(integer n) (devolve o n-ésimo argumento como um ponteiro para uma cadeia de caracteres) (n > 0); e string envp(integer n) (devolve a n-ésima variável de ambiente como um ponteiro para uma cadeia de caracteres) (n > 0). O valor de retorno desta função é devolvido ao ambiente que invocou o programa. Este valor de retorno segue as seguintes regras (sistema operativo): 0 (zero), execução correu sem erros; 1 (um), argumentos inválidos (em número ou valor); 2 (dois), erro de execução. Os valores superiores a 128 indicam que o programa terminou com um sinal. Em geral, para correcto funcionamento, os programas devem devolver 0 (zero) se a execução foi bem sucedida e um valor diferente de 0 (zero) em caso de erro. A biblioteca de run-time (RTS) contém informação sobre as rotinas de baixo nível disponíveis. 7 Instruções Excepto quando indicado, as instruções são executadas em sequência, so os seus efeitos traduzidos, em geral, pela alteração do valor de variáveis. As instruções são separadas pelas mudanças de uma linha lógica para a seguinte. 7.1 Expressão como instrução Quando uma expressão figurar numa linha lógica, é utilizada como instrução, mesmo que não produza qualquer efeito secundário. A avaliação da expressão é realizada como habitualmente, mas o seu valor é descartado. 7.2 Blocos Um bloco é definido pelas mudanças de indentação que ocorrem nos seus limites: um aumento marca o seu início e uma diminuição o seu fim. Durante o bloco, a indentação é constante. Cada bloco tem uma zona de declarações de constantes e variáveis locais (facultativa), seguida por uma zona (não nula) com instruções. 7

8 A longevidade das variáveis, bem como a sua visibilidade, é limitada ao bloco em que foram declaradas. As entidades declaradas podem ser directamente utilizadas em sub-blocos ou passadas como argumentos para funções chamadas dentro do bloco. Caso os identificadores usados para definir as constantes e variáveis locais já estejam a ser utilizados para definir outras entidades ao alcance do bloco, o novo identificador passa a referir uma nova entidade definida no bloco até ao que ele termine (a entidade previamente definida continua a existir, mas não pode ser directamente referida pelo seu nome). Esta regra não se aplica à redefinição de variáveis com o mesmo nome da função actual ou dos seus argumentos (ambas são proibidas) ( 6.3). 7.3 Instrução condicional Se o valor da expressão que segue a palavra chave if for diferente de 0 (zero) então a instrução que segue a palavra then é executada. Caso contrário, se existir uma palavra, a instrução correspondente é executada. 7.4 Instruções de iteração O ciclo do-until--done é semelhante ao ciclo do-while da linguagem C. A parte alternativa () é executada se a condição em until nunca for verdadeira (i.e., não é executada se a condição de controlo alguma vez tiver sido verdadeira). O ciclo while-do--done é semelhante ao ciclo while da linguagem C. A parte alternativa () é executada se a condição em while nunca for verdadeira (i.e., não é executada se a condição de controlo alguma vez tiver sido verdadeira). 7.5 Instrução de retorno Indicada pela palavra reservada return, a existir deverá ser a última instrução do bloco em que se insere ( 6.3). 7.6 Instrução de continuação Esta instrução, indicada pela palavra chave continue, reinicia o ciclo interno em que a instrução se encontrar, tal como a instrução continue em C. Quando seguida de um número inteiro n, reinicia o n-ésimo ciclo a contar do actual (n = 1). Esta instrução só pode existir dentro de um ciclo e quando existe deve ser a última do bloco. A especificação de um número maior que o aninhamento dos ciclos é um erro. 7.7 Instrução de terminação Esta instrução, indicada pela palavra chave break, termina a execução do ciclo interno em que a instrução se encontrar, tal como a instrução break em C. Quando seguida de um número inteiro n, termina o n-ésimo ciclo a contar do actual (n = 1). Esta instrução só pode existir dentro de um ciclo e quando existe deve ser a última do bloco. Esta instrução obriga à reavaliação da condição de iteração do ciclo. A especificação de um número maior que o aninhamento dos ciclos é um erro. 7.8 Reserva de memória Esta instrução permite reservar memória na pilha da função actual, conto espaço suficiente para o número de bytes indicados pelo seu argumento inteiro. O tipo de retorno é idêntico ao do left-value utilizado. O identificador da zona de memória deve ser declarado como um vector sem dimensão do tipo apropriado, podo ser um argumento de função. 8 Expressões As expressões são representações algébricas de quantidades (i.e., todas as expressões devolvem um valor). As expressões utilizam operadores algébricos comuns (e.g., soma, subtracção), operadores lógicos (e.g., negação) e relacionais (e.g., maior ou igual). Se a um operador forem passados valores inteiros e reais, os inteiros devem ser promovidos ao valor real correspondente. Analogamente, um inteiro pode ser utilizado onde é esperado um real, devo ser promovido antes da sua utilização. As expressões são sempre avaliadas da esquerda para a direita, indepentemente da associatividade do operador. A precedência dos operadores é a mesma para operadores na mesma secção, so as secções seguintes de menor prioridade que as anteriores. O valor resultante da aplicação da expressão bem como a sua associatividade são indicados para cada operador. 8

9 A tabela seguinte que resume os operadores, por grupos de precedência decrescente: parênteses ( ) não associativo indexação [ ] da esquerda para a direita (prefixo) não associativo leitura? (sufixo) não associativo incremento/decremento (prefixo ou sufixo) não associativos unária - + (prefixo) não associativos não lógico not (prefixo) não associativo potência ** da direita para a esquerda multiplicativa * / % da esquerda para a direita aditiva + - da esquerda para a direita compação < > <= >= não associativos igualdade = <> da esquerda para a direita e lógico and da esquerda para a direita ou lógico or da esquerda para a direita atribuição := da direita para a esquerda escrita!!! (sufixo) não associativo Operadores com o mesmo nome que em C têm, em geral, o mesmo significado que em C (excepto onde indicado). 8.1 Expressões primárias Identificadores Identificadores ( 2.3) são expressões desde que tenham sido devidamente declarado: correspondem a nomes de variáveis, constantes, ou funções. Um identificador é o caso mais simples de um left-value, i.e., uma entidade que pode ser utilizada no lado esquerdo (left-value) de uma atribuição. O nome de uma função é um identificador especial dentro da função actual, designando o valor de retorno ( 6.3) Literais Ver Parênteses curvos Esta expressão tem o valor da expressão sem os parênteses e permite alterar a prioridade dos operadores. Expressões entre parênteses não podem ser utilizadas como left-value ( 8.1.4) Indexação Esta expressão devolve o valor da posição indicada por um ponteiro: a notação é a expressão do ponteiro, seguida do índice entre parênteses rectos. O resultado é o valor existente na posição de memória base somado com o deslocamento, em quantidades da dimensão do tipo do valor da expressão. O primeiro elemento tem deslocamento 0 (zero). Se a expressão ponteiro for um left-value, então a expressão indexação poderá também ser um left-value. Exemplo: p[0] (acesso à posição apontada por p) Invocação de funções Ver Expressões unárias Expressão de indicação de posição A expressão localização (@) devolve a posição de memória ocupada pelo left-value indicado como argumento. Retorna um valor do tipo do ponteiro apropriado para o objecto em causa. indica a posição de memória de p. 9

10 8.2.2 Leitura A operação de leitura (?) permite atribuir ao left-value indicado um valor inteiro ou real. A operação retorna o valor inteiro 1 (um), se tiver conseguido ler o valor, -1 (menos um) no fim do canal (EOF), e 0 (zero) nos restantes casos Identidade A expressão identidade (+) devolve o valor do seu argumento inteiro ou real Simétrico A expressão valor simétrico (-) devolve o simétrico do seu argumento inteiro ou real Incremento O operador de incremento (++) incrementa em uma unidade o valor do left-value passado como argumento. Pode ser um préincremento (prefixo) ou um pós-incremento (sufixo). Notar que x := x + 1 ou x[0]++ são incrementos de uma unidade ao primeiro valor de x, enquanto x++ é um avanço do ponteiro para o valor seguinte (apenas possível quando x for um ponteiro declarado var x[] ou equivalente) Decremento O operador de decremento (--) decrementa em uma unidade o valor do left-value passado como argumento. Pode ser um pré-decremento (prefixo) ou um pós-decremento (sufixo). Aplicam-se as disposições enunciadas para o incremento. 8.3 Expressão de potência A operação de potência (**) é apenas aplicável a valores inteiros, devolvo a multiplicação do primeiro argumento por ele próprio tantas vezes quantas o valor do segundo argumento. 8.4 Expressões multiplicativas As operações são aplicáveis a inteiros e reais (excepto onde indicado), devolvo o resultado da respectiva operação algébrica. A divisão (/) é inteira se ambos os operandos o forem. É um erro o denominador ter o valor 0 (zero), tanto no caso da divisão, como no caso do resto da divisão Multiplicação A multiplicação (*) corresponde à operação algébrica se os operandos forem inteiros ou reais (há promoção de tipos quando necessário). É possível um uso especial da multiplicação em que o primeiro operando é uma cadeia de caracteres e o segundo um inteiro não negativo (outras combinações de ordem ou sinal são ilegais). Neste caso, a cadeia de caracteres é repetida tantas vezes quantas o valor do inteiro. Um valor 0 (zero) corresponde à cadeia nula. Exemplo: * (i * 2)! imprime uma sequência de caracteres brancos (de comprimento igual ao dobro do valor de i) Resto de divisão inteira A operação de resto (%) é aplicável a valores inteiros e reais (os operandos reais são truncados). 10

11 8.5 Expressões aditivas As operações são apenas aplicáveis a valores inteiros e reais, devolvo o resultado da respectiva operação algébrica. Estas operações podem ter ponteiros como operandos, correspondo às operações existentes em C/C++: (i) deslocamentos (um dos operandos deve ser um ponteiro e o outro um inteiro); (ii) diferenças de ponteiros (apenas quando se aplica o operador subtracção (-) a dois ponteiros do mesmo tipo: o resultado é o número de objectos do tipo apontado entre eles) Somas e cadeias de caracteres Quando um dos elementos da soma é uma cadeia de carateres, quer sob a forma de um literal quer sob a forma de uma constante, o resultado é também uma cadeia de caracteres. Assim, a soma de duas cadeias de caracteres resulta numa cadeia de caracteres que é a concatenação de ambas as sequências. Por outro lado, se um dos elementos for um inteiro ou um real e o outro uma cadeia de caracteres, o inteiro é convertido numa cadeia de caracteres, e o resultado é a concatenação do valor convertido com a cadeia de caracteres. A ordem das cadeias parciais na cadeia final depe da ordem dos operandos da soma. 8.6 Expressões de comparação As operações de comparação (< <= >= >) são aplicáveis a inteiros e reais. Devolvem o valor inteiro 0 (zero) caso a comparação seja falsa e o valor inteiro 1 (um) em caso contrário. 8.7 Expressões de igualdade As operações igual (=) e diferente (<>) são aplicáveis a valores inteiros e reais. Devolvem o valor inteiro 0 (zero) caso a comparação seja falsa e o valor inteiro 1 (um) em caso contrário. 8.8 Expressões de negação lógica A operação (not) é aplicável a valores inteiros e retorna valores inteiros. O valor 0 (zero) representa a condição falsa e o valor 1 (um) a condição verdadeira. 8.9 Expressão de junção lógica A operação (and) é aplicável a valores inteiros, devolvo um valor diferente de zero caso ambos os argumentos sejam diferente de 0 (zero) e o valor 0 (zero) caso contrário. Se o primeiro argumento for 0 (zero), o segundo argumento não deve ser avaliado Expressão de alternativa lógica A operação (or) é aplicável a valores inteiros. Tem o valor inteiro 0 (zero) se ambos os argumentos forem iguais a 0 (zero) e diferente de zero caso contrário. Se o primeiro argumento for diferente de 0 (zero), o segundo argumento não deve ser avaliado Expressão de atribuição O valor da expressão do lado direito do operador (:=) é atribuído à posição indicada pelo lado esquerdo (left-value). O uso de um valor real na atribuição a uma posição inteira é possível e implica uma operação de truncatura. Notar, no exemplo seguinte, que o valor j+5 é colocado em base[j+5], por causa da associatividade do operador. a := base[i] := i := j Expressão de escrita A operação de escrita (! ou!!) permite apresentar num canal de saída o valor do seu operando. A versão!! realiza a mesma operação que a versão!, mas provoca uma mudança de linha. O valor devem ser apresentados em decimal para os valores numéricos e em ASCII e ISO para valores do tipo string. 11

12 9 Exemplos Os exemplos apresentados não são exaustivos, pelo que não ilustram todos os aspectos da linguagem. 9.1 Cálculo do factorial Dois programas para cálculo do factorial. # Factorial recursivo (com função) factorial(n) if n > 1 then factorial := n * factorial(n-1) factorial := n init f = [ 5 ] start() if argc() = 1 then f = atoi(argv(1)) f +! = + factorial(f)!! start := 0 # Factorial iterativo (sem função) start() var f, n, i if argc() = 1 then n := atoi(argv(1)) n := 5 f := i := n while i > 2 do i := i - 1 f := f * i done n +! = + f!! start := Cálculo de termos da série de Fibonacci Cálculo recursivo de um termo da série de Fibonacci: fibonacci(n) if n = 0 or n = 1 then fibonacci := n fibonacci := fibonacci(n-1) + fibonacci(n-2) start() var n Introduza um número inteiro positivo:! if n? <> 1 or n <= 0 then start := 1 Fibonacci( +n+ ) = +fibonacci(n)!! start := 0 10 Omissões Casos omissos e erros serão corrigidos em futuras versões do manual de referência. 12

Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 5 de Abril de 2010

Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 5 de Abril de 2010 Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 5 de Abril de 2010 Classificação mínima: 9,50 valores (sem arredondamentos) (40% da nota final). Fraudes na execução

Leia mais

Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 22 de Março de 2010

Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 22 de Março de 2010 Compiladores LEIC Alameda 2 o Semestre 2009/2010 Linguagem Pipoca Manual de Referência 22 de Março de 2010 Classificação mínima no projecto: 9,50 valores (sem arredondamentos) (40% da nota final). Fraudes

Leia mais

1 Tipos de dados. 2 Manipulac~ao de nomes

1 Tipos de dados. 2 Manipulac~ao de nomes Projecto de Compiladores Ano lectivo 2013/2014, 2 o Semestre OBI-WAN (OB1) (manual de referência) 28 de Fevereiro de 2014 Esclarecimento de dúvidas: Consultar sempre o corpo docente atempadamente: presencialmente

Leia mais

Projecto de Compiladores LEIC-A 2007/2008 (2 o Semestre) Linguagem NX6 Manual de Referência 4 de Março de 2008

Projecto de Compiladores LEIC-A 2007/2008 (2 o Semestre) Linguagem NX6 Manual de Referência 4 de Março de 2008 Projecto de Compiladores LEIC-A 2007/2008 (2 o Semestre) Linguagem NX6 Manual de Referência 4 de Março de 2008 A nota do projecto deve ser positiva (i.e. > 0) e contribui com um máximo de 8 valores (40%)

Leia mais

1 Tipos de dados. 2 Manipulac~ao de nomes. Projecto de Compiladores Ano lectivo 2012/2013, 2 o Semestre

1 Tipos de dados. 2 Manipulac~ao de nomes. Projecto de Compiladores Ano lectivo 2012/2013, 2 o Semestre Projecto de Compiladores Ano lectivo 2012/2013, 2 o Semestre MAYFLY (manual de referência) 12 de Abril de 2013 Esclarecimento de dúvidas: Consultar sempre o corpo docente atempadamente: presencialmente

Leia mais

Compiladores (LEIC-A 2 o Semestre 2008/2009) Linguagem S9 Manual de Referência 16 de Março de 2009

Compiladores (LEIC-A 2 o Semestre 2008/2009) Linguagem S9 Manual de Referência 16 de Março de 2009 Compiladores (LEIC-A 2 o Semestre 2008/2009) Linguagem S9 Manual de Referência 16 de Março de 2009 A nota do projecto deve ser positiva (i.e. > 0) e contribui com um máximo de 8 valores (40%) para a nota

Leia mais

1 Características Básicas

1 Características Básicas Compiladores (LEIC-A 2 o Semestre 2010/2011) Linguagem at Manual de Referência 10 de Maio de 2011 A nota do projecto (40% da nota final) deve ser superior a 9,5 (sem arredondamentos). Fraudes na execuçã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 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

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

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2 Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador

Leia mais

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas

Elementos Básicos. C# - Elementos básicos. Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas C# - Elementos básicos Daniela da Cruz 2010 Elementos Básicos Primeiro programa Tipos de dados Variáveis Constantes Expressões e operadores Controlo de fluxo Tabelas Linguagens de Programação - Daniela

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

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4 Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para

Leia mais

Linguagem Java - Introdução

Linguagem Java - Introdução Linguagem Java - Introdução Identificadores válidos resultado teste01 _numeroclientes $fortuna Identificadores Identificadores inválidos 101dalmatas 34 #x Palavras reservadas abstract assert*** boolean

Leia mais

A Linguagem C. A forma de um programa em C

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

Leia mais

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

Operadores. Tipo de operadores. Aritméticos. Relacionais. Lógicos. Bit a bit. Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc.

Operadores. Tipo de operadores. Aritméticos. Relacionais. Lógicos. Bit a bit. Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc. Operadores Tipo de operadores Aritméticos Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc. Relacionais Comparação entre entidades. Lógicos Bit a bit 1 Operadores Aritméticos Operadores

Leia mais

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C

Referências. Linguagem C. Tipos de variáveis em XC8. Tipos de variáveis. Tipos de variáveis em XC 8 Exemplo. Radicais numéricos em C Referências Linguagem C Jun Okamoto Jr. Kernighan, Brian W. and Ritchie, Dennis M. The C Programming Language (ANSI C); Prentice Hall; 2ª Edição; 1988 Microchip Technology Inc. MPLAB XC8 C Compiler User

Leia mais

Operadores e separadores Identificadores Palavras chave Constantes

Operadores e separadores Identificadores Palavras chave Constantes Sumário Abordagem de um problema Noções de léxico e de sintaxe Alfabeto da linguagem C Operadores e separadores Identificadores Palavras chave Constantes Programação 2007/2008 DEEC-IST 1 Problema Pretende-se

Leia mais

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior ALGORITMOS E APLICAÇÕES FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior Formato Básico do Pseudocódigo Tipos de dados O VisuAlg prevê quatro tipos de dados: inteiro, real,

Leia mais

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia PROGRAMAS BÁSICOS EM C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia Calculo da área de um triângulo Algoritmo Área Var base,

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

K&R: Capitulo 2 IAED, 2012/2013

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

Leia mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com

Leia mais

Objectivos. Observar os tipos fornecidos pelo C++ Explicar as regras sintácticas para nomes de identificadores Estudar variáveis e constantes

Objectivos. Observar os tipos fornecidos pelo C++ Explicar as regras sintácticas para nomes de identificadores Estudar variáveis e constantes Tipos de Dados Objectivos Observar os tipos fornecidos pelo C++ São dados alguns exemplos Explicar as regras sintácticas para nomes de identificadores Estudar variáveis e constantes O que são Como se distinguem

Leia mais

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período Programação I Aula 4 - Prof. Laura Silva de Assis Engenharia de Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis 2 o semestre - 2015 1 Sumário

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

A linguagem C (visão histórica)

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

Leia mais

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

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

Leia mais

A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica:

A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica: 1 de 16 08/02/2012 14:08 Linguagem Linguagem Algorítmica A linguagem algorítmica utiliza o português para a definição dos comandos e tem as seguintes característica: 1 - A linguagem não á sensível á capitulação

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

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

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

Leia mais

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

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB Noçõ ções básicas b da linguagem Java Profs. Marcel Hugo e Jomi Fred Hübner Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB Introduçã ção Origem Funcionamento Vantagens Linguagem

Leia mais

Diagramas Sintáticos

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

Leia mais

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

Variáveis primitivas e Controle de fluxo

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

Leia mais

SEBENTA INTRODUÇÃO Á ALGORITMIA

SEBENTA INTRODUÇÃO Á ALGORITMIA SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar

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

Introdução ao Fortran 90-1

Introdução ao Fortran 90-1 Introdução ao Fortran 90-1 Departamento de Física UFPel Definição de Programa em Fortran 90 Programa ou Código-fonte Programa ou código-fonte é um conjunto de instruções, também chamadas de comandos, escritas

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

1/50. Conceitos Básicos. Programa Básico

1/50. Conceitos Básicos. Programa Básico 1/50 Conceitos Básicos Programa Básico 2/50 Operações básicas de entrada e saída #include main retorna um inteiro int main() { std::cout

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

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA SUMÁRIO Introdução Conceitos básicos Formato básico Tipos primitivos Variáveis Constantes Operadores Operações

Leia mais

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Algoritmos Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Conceitos Linhas de Código de um Algoritmo ou Programa escrita do programa linha a linha, ou seja, a sintaxe do programa, podendo-se

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

Compilação da linguagem Panda

Compilação da linguagem Panda Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo

Leia mais

Tipos Primitivos, estruturas de iteração e decisão.

Tipos Primitivos, estruturas de iteração e decisão. Tipos Primitivos, estruturas de iteração e decisão. André Luis Meneses Silva andreluis.ms@gmail.com http://br.geocities.com/programacao2ufs/ Agenda Tipos Primitivos de Dados Variáveis e Constantes es Comandos

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

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

C Operadores e Expressões

C Operadores e Expressões C Operadores e Expressões Adriano Cruz adriano@nce.ufrj.br Instituto de Matemática Departamento de Ciência da Computação UFRJ 15 de agosto de 2013 Adriano Cruz adriano@nce.ufrj.br (IM-DCC-UFRJ)C Operadores

Leia mais

Java 2 Standard Edition Tipos, literais, operadores e controle de fluxo

Java 2 Standard Edition Tipos, literais, operadores e controle de fluxo Java 2 Standard Edition Tipos, literais, operadores e controle de fluxo Helder da Rocha www.argonavis.com.br 1 Operadores e controle de fluxo da execução Este módulo explora as estruturas procedurais da

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

AMBIENTE DE PROGRAMAÇÃO PYTHON II

AMBIENTE DE PROGRAMAÇÃO PYTHON II Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 2 AMBIENTE DE PROGRAMAÇÃO PYTHON II 2.1. Objectivos

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

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

7 Operadores e Expressões

7 Operadores e Expressões 7 Operadores e Expressões 7.1 Definição de operador, expressão e operando Um operador é um símbolo utilizado para identificar que uma determinada operação deve ser realizada sobre um ou mais parâmetros,

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

Descrição da Linguagem DECAF

Descrição da Linguagem DECAF Descrição da Linguagem DECAF Eduardo Ferreira dos Santos 8 de junho de 2017 Abstract The project for the course is to write a compiler for a language called Decaf. Decaf is a simple imperative language

Leia mais

Introdução à Programação em C Input / Output

Introdução à Programação em C Input / Output Introdução à Programação em C Input / Output Resumo Aula Anterior Programa começa com função main() Sintaxe para definição de funções Definição de variáveis e atribuições Estruturas de controlo if-then

Leia mais

Engenharia Elétrica AAM. Professor: Marco Shawn Meireles Machado

Engenharia Elétrica AAM. Professor: Marco Shawn Meireles Machado Engenharia Elétrica AAM Professor: Marco Shawn Meireles Machado Objetivos da Aula: Definir linguagem de alto nível e baixo nível; Descrever a linguagem assembler; Descrever a linguagem C; Revisão linguagem

Leia mais

Programação com Acesso a BD. Programação com OO Acesso em Java

Programação com Acesso a BD. Programação com OO Acesso em Java Programação com OO Acesso em Java a BD Curso: Técnico em Informática Campus: Ipanguaçu José Maria Monteiro Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento Clayton Maciel de Informática

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução ao FORTRAN Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

Algoritmos II prof. Daniel Oliveira

Algoritmos II prof. Daniel Oliveira Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional

Leia mais

Aula 03: Introdução a C

Aula 03: Introdução a C Aula 03: Introdução a C Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior O que é um computador Organização de um

Leia mais

Introdução à programação em PASCAL. Aula de 22/10/2001. Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores

Introdução à programação em PASCAL. Aula de 22/10/2001. Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores Introdução à programação em PASCAL Aula de 22/10/2001 Nota: Conjunto de slides baseados nas transparências utilizadas em PEDA em anos anteriores Conteúdo Conceito de linguagem de programação O processo

Leia mais

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

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

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução ao FORTRAN Professor Hugo de Oliveira Barbalho hbarbalho@ic.uff.br Material produzido pelo professor: Leandro Augusto Frata Fernandes (laffernandes@ic.uff.br)

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

11 - Estrutura de um programa em C

11 - Estrutura de um programa em C 11 - Estrutura de um programa em C directivas para o compilador { main ( ) declarações instruções } -É possível utilizar comentários, exemplo: /* Comentário */ que não são traduzidos pelo compilador, pois

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

Funções getchar() e putchar()

Funções getchar() e putchar() Sumário Tipos elementares Inteiro, Carácter, Real, Booleano, Void Variáveis e os operadores & e * Constantes Funções printf() e scanf() Opções de formatação Funções getchar() e putchar() Programação 2007/2008

Leia mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programação I A Linguagem C. Prof. Carlos Alberto Programação I A Linguagem C Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Tipos de variáveis comuns em linguagens em geral Identificadores

Leia mais

LÓGICA DIGITAL - CONCEITOS. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas.

LÓGICA DIGITAL - CONCEITOS. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas. * Tipos de Dados. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas. 1 TIPOS DE DADOS Dados inteiros Representação das informações pertencentes

Leia mais

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha LINGUAGEM DE PROGRAMAÇÃO C AULA 2 Professor: Rodrigo Rocha TIPOS, VARIÁVEIS E CONSTANTES Tipos de Dados Variáveis Constantes Introdução a entrada e saída Printf Scanf Ferramentas: Dev-C++ Code::Blocks

Leia mais

TASM DEFINIÇÃO DE UMA NOVA TABELA DE CONVERSÃO

TASM DEFINIÇÃO DE UMA NOVA TABELA DE CONVERSÃO TASM O TASM (Telemark Assembler) é um assemblador baseado em tabelas de conversão que corre em MS-DOS ou Linux. Código Assembly escrito de acordo com uma determinada sintaxe pode ser compilado usando o

Leia mais

4. Estruturas Fundamentais de Programação em C

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

Leia mais

Programação. MEAer. Expressões e Instruções. Bertinho Andrade da Costa. Instituto Superior Técnico. 2011/2012 1º Semestre

Programação. MEAer. Expressões e Instruções. Bertinho Andrade da Costa. Instituto Superior Técnico. 2011/2012 1º Semestre Programação MEAer 2011/2012 1º Semestre Bertinho Andrade da Costa Instituto Superior Técnico Expressões e Instruções Programação 2011/2012 DEEC-IST Expressões 1 Sumário Expressões Formato Expressões de

Leia mais

Conceitos Básicos de C

Conceitos Básicos de C Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,

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 3.3. Conceitos Básicos de C: Expressões, Operadores e Bibliotecas

Leia mais

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 4 EXPRESSÕES BOOLEANAS O tipo primitivo boolean É um tipo de dados primitivo em Java que possui

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Entrada e saída: escrevendo na tela Veja uma comparação entre um programa Portugol e seu equivalente em C: Inicio Inteiro

Leia mais

Puca Huachi Vaz Penna

Puca Huachi Vaz Penna Aula 3 C++: variáveis e expressões aritméticas 2017/1 BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66, 32 e 33 Puca Huachi Vaz Penna Departamento de Computação Universidade Federal de Ouro

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

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

ECT1203 Linguagem de Programação

ECT1203 Linguagem de Programação Universidade Federal do Rio Grande do Norte Escola de Ciências e Tecnologia ECT1203 Linguagem de Programação Prof. Aquiles Burlamaqui Profa. Caroline Rocha Prof. Luiz Eduardo Leite Prof. Luciano Ferreira

Leia mais

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

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

Leia mais

Linguagem C. André Tavares da Silva.

Linguagem C. André Tavares da Silva. Linguagem C André Tavares da Silva dcc2ats@joinville.udesc.br Variáveis Posição nomeada de memória que é usada para guardar um valor que pode ser modificado pelo programa. Todas as variáveis devem ser

Leia mais

Lição 4 Fundamentos da programação

Lição 4 Fundamentos da programação Lição 4 Fundamentos da programação Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Identificar as partes básicas de um programa em Java Reconhecer as diferenças

Leia mais

Introdução à Programação em C

Introdução à Programação em C Introdução à Programação em C Funções Resumo Aula Anterior Tabelas Strings (Tabelas de Caracteres) 2 1 Resumo Funções Definição Protótipo e implementação return e void Passagem por valor Exemplos 3 Funções

Leia mais

6 Alguns conceitos e comandos em programação

6 Alguns conceitos e comandos em programação 6 Alguns conceitos e comandos em programação 6.1 Diretivas Diretivas são instruções que permitem ao programador efetuar algum tipo de modificação à compilação, sendo analisadas e executadas pelo pré-compilador,

Leia mais

Métodos de Programação I Ana Maria de Almeida

Métodos de Programação I Ana Maria de Almeida Métodos de Programação I 2. 13 type naipe = ( ouros, copas, paus, espadas ); var trunfo : naipe; Claro que são apenas identificadores e não existirá a mesma escolha de operadores e funções sobre eles que

Leia mais

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO Dados em Algoritmos Quando escrevemos nossos programas, trabalhamos com: Dados que nós fornecemos ao programa Dados

Leia mais

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani -

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani - UAL é uma linguagem interpretada para descrição de algoritmos em Português. Tem por objetivo auxiliar o aprendizado do aluno iniciante em programação através da execução e visualização das etapas de um

Leia mais

Aula 4: Bases Numéricas

Aula 4: Bases Numéricas Aula 4: Bases Numéricas Fernanda Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Material baseado nos slides do prof. Diego Passos Fernanda Passos (UFF) Bases Numéricas

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

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

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