Descrição da Linguagem Pascal Jr. Características gerais PascalJr possui convenções de tipos igual a linguagem Pascal PascalJr suporta definições de funções Com passagem de parâmetros por valor e por referência Um programa correto em PascalJr é também um programa correto em Pascal Excetuando-se pelo tipo alfa Os comandos de PascalJr são: atribuição, comando composto begin..end, if-then, if-thenelse, while-do, do-while, for, repeat-until, chamada de procedimentos, chamada de funções, etc. As rotinas de E/S (múltiplos argumentos) em PascalJr são: read, readln: com apenas 1 argumento write, writeln: com 2 argumentos, sendo uma string e uma variável, separados por vírgula CCComp - DCE - UESB
Descrição da Linguagem Pascal Jr. Características gerais As constantes lógicas, assim como em Pascal, são true e false Palavras chaves são palavras reservadas em PascalJr Um comentário pode ser colocado em qualquer lugar onde um delimitador for permitido Compatibilidade de tipos é como em Pascal A gramática de PascalJr é a mesma gramática da linguagem Pascal Porém reduzida, uma vez que PascalJr não possui muitas das construções que são suportadas por Pascal A semântica dos comandos de PascalJr é equivalente à semântica dos respectivos comandos em Pascal PascalJr somente possui constantes numéricas decimais, não suportando constantes em octal e hexadecimal CCComp - DCE - UESB
Descrição da Linguagem Pascal Jr. Características gerais Para simplicidade de implementação, identificadores em PascalJr necessitam diferir nos primeiros 15 caracteres. Os caracteres excedentes poderão ser ignorados pelo scanner PascalJr não possui nenhum comando de pré-processador CCComp - DCE - UESB
CCComp - DCE - UESB Definições para Pascal Jr. O tamanho de cada linha (buffer) será de 80 caracteres O tamanho máximo de uma string será uma linha O tamanho máximo das tokens será de 15 caracteres Os erros poderão ser reportados na mesma hora em que são encontrados ou bem mais tarde Ex.: Falta de um end O diagrama de estados para o Pascal Jr. possui mais ou menos 30 estados e poucas colunas
CCComp - DCE - UESB Programando o SCANNER O objetivo do SCANNER é identificar as tokens A idéia básica de programação do SCANNER é construir um autômato finito Para isto serão necessárias três etapas Construir um diagrama de estados para cada token Construir uma tabela de próximo estado Programar o reconhecimento da tabela de próximo estado O autômato considera um apontador movendo-se através dos estados A partir de um estado inicial até um estado de aceitação ou erro
CCComp - DCE - UESB Programando o SCANNER Para cada token o SCANNER deverá gerar as seguintes informações (veja a tabela exemplo) tipo valor (conjunto de símbolos) tamanho Os operadores devem ser agrupados em 3 classes: ADDOP (+, -, OR) MULTOP (*, /, DIV, MOD, AND) RELOP (=, <, >, <=, =>, <>)
Projeto Final do SCANNER CCComp - DCE - UESB SCANNER Piloto Pede ao scanner uma token por vez GetToken Classifica token (palavra chave ou nome do usuário) ADDOP, MULTOP, RELOP Retorna token: tipo, valor, tamanho GetBSU Implementa a tabela de próximo estado GetChar Obtém caracteres do buffer. Responsável pela devolução de caracteres não utilizados GetFile Lê e imprime linhas do arquivo fonte. Cada linha é retida em um buffer para ser analisada
CCComp - DCE - UESB Tratamento de Erros na Fase 1 Erros léxicos Erros na formação das tokens Saída na tela Linha 1: if (a $ 10) then ^ Erro na linha 1: SIMBOLO NAO PERTENCE A GRAMATICA! Exemplo de linha que não contém erros Exemplo: then )10 < a( if