Você está na página 1de 18

Definição da linguagem de

Programação

• Vamos definir a linguagem de programação a


qual será pautado o nosso estudo.

• É a linguagem que será definida pelas equipes.


Aspectos Gerais da Linguagem
• As palavras reservadas são delimitadas, no programa
fonte, por brancos, operadores aritméticos ou símbolos
especiais;

• Os comentários são delimitados por “{” e “}”

• Linguagem de formato livre (podendo haver quebra de


linha, espaços, tabulações e endentação em geral).

• A linguagem não será “Case Sensitive”


Estrutura Léxica
• Símbolos:

– <Letra> ::= [a-z] | [A-Z]


– <Digito> ::= [0-9]
– <Id> ::= letra {letra | digito}*
– <Integer> ::= <digito>+
– <Real> ::= <Integer>.<Integer>
– <String> ::= <Id>
Estrutura Léxica
• Símbolos:

– <op_relacionais> ::= < | > | <= | >= | = | <>

– <op_aritmetico> ::= + | - | * | /

– <op_booleanos> ::= or | and

– Especiais ::= . | , | ; | ) | ( | :=

– Palavras reservadas ::= begin | end | if | then | else | while | do


| until | repeat | integer | real | all | and | or | string |
Program
Analisador Léxico (Scanner)
• Deve ser uma função de nome SCAN que retorna três
parâmetros a depender:

– Token: tipo básico do elemento;


– Lexema: valor nominal em formato string;
– Valor: valor nominal em formato numerico;

• No caso de o token ser um identificador devem ser


retornados token e lexema
• Se for uma palavra reservada, operador ou especial:
token apenas
• Se for um inteiro: token e valor
Analisador Léxico (Scanner)
• Exemplo:
iVou2 := 23;

ID, iVou2
:=
Numerico, 23
;
Analisador Léxico (Scanner)

• O Scanner deve emitir mensagem de erro,


sempre que for o caso. Formato:
– ERRO x na linha n: mensagem
X é extraído da tabela de erros.

• Para auxiliar, deve-se:


– Organizar a tabela de palavras reservadas
Analisador Sintático (Parser)
• Declarações:
– Apenas de variáveis (não sendo necessário
declarar procedimentos e funções).

• As variáveis podem ser do tipo string, integer


ou real, e as declarações devem ter o
seguinte formato:
<decl_var> ::= <tipo> <id> {,<id>}*;
<tipo> ::= integer | real | string
Analisador Sintático (Parser)
• Expressões:
• O parser deve fornecer as produções para
expressões de modo a obedecer a seguinte
ordem de precedência de operadores:

• 1. *, /
• 2. +, -
• 3. =, <>, <, >, <=, >=
Analisador Sintático (Parser)
• Expressões apenas com os operadores *, /, +, -
são expressões aritméticas.

• Expressões com os operadores de comparação


=, <>, <, >, <=, >= são expressões relacionais.

• Expressões com os operadores booleanos or,


and são expressões relacionais.
Analisador Sintático (Parser)
• Não podemos ter mais de um operador
relacional em um expressão. Podemos ter
expressões aritméticas de qualquer lado de
um operador relacional. Mas, não podemos
ter expressões relacionais em comandos de
atribuição.
Analisador Sintático (Parser)
• O comando All só aceita parametros com
variáveis do tipo String.
Parser – Gramática
• <Programa> ::= <bloco_principal>

• <bloco_principal> ::= Programa <id> ; [ <decl_var> ]* Begin


<bloco> End.

• <bloco> ::= Begin [<comando> [ <comando>]*]? End ;

• <decl_var> ::= <tipo> <id> [,<id>]*;


• <tipo> ::= integer | real | string
• <comentario> ::= { ‘???????’ }
Parser – Gramática
• <comando> ::= <comando_basico>
| <iteracao>
| if (<expr_relacional>) then <comando> [else <comando>]?

• <comando_basico> ::= <atribuicao>


| <bloco>
| All ( <id> [, <id>]* );
• <atribuicao> ::= <id> := <expr_arit> ;
• <iteracao> ::= while (<expr_relacional>) do <comando>
| repeat <comando> until (<expr_relacional>) ;
Parser – Gramática
• <val> ::= <id> | <integer> | <real>

• <expr_relacional> ::= <val> <op_relacionais> <val>


| (<expr_relacional>) [<op_booleanos>
(<expr_relacional>)] ?

• <expr_arit> ::= <val>


| <val> <op_aritmetico> <val>
| (<expr_arit> ) <op_aritmetico> (<expr_arit>)
Equipes
– Vamos agora formar as equipes que vão
desenvolver os trabalhos da disciplina.

– Equipes com 4 componentes;

Atenção: Equipes com mais de 4 componentes,


terão sua nota geral do trabalho reduzida em 2,0
pontos por componente extra.
DÚVIDAS

Você também pode gostar