Na Fase 1 pretende-se implementar um analisador léxico que separe a entrada em tokens. Cada token encontrado deverá ser escrito no ecrã. Ver este exercício
A linguagem LEI tem os seguintes tokens:
se senao para ate passo fazer enquanto quebra continua inteiro real vector classe subclasse funcao construtor destrutor
* |
produto |
/ |
divisão |
+ |
soma |
- |
subtracção |
/q |
quociente da divisão inteira |
/r | resto da divisão inteira |
< |
menor |
<= |
menor ou igual |
> |
maior |
>= |
maior ou igual |
= |
igual |
!= | diferente |
_e |
e lógico |
_ou |
ou lógico |
_oux |
ou exclusivo lógico |
_nao |
nao lógico |
e |
e |
ou |
ou |
oux |
ou exclusivo |
nao |
nao |
dir |
deslocamento à direita |
esq | deslocamento à esquerda |
<- |
atribuição |
// |
comentários (ignoram tudo até ao fim da linha) |
\ |
continuação na próxima linha (desde que colocado antes do carácter de nova linha) |
\t |
tabulação |
\n |
nova linha |
{ e } | delimitadores de conjuntos de instruções |
( e ) | delimitadores de argumentos de funções |
[ e ] | delimitadores de índices de vectores |
, | separador de argumentos nas funções |
. | separador do nome da variável duma classe dum seu elemento |
Os espaços em branco são os caracteres de espaço, tabulação e nova linha. Os espaços em branco são admitidos desde que dentro duma string. Neste caso, as tabulações e novas linhas serão, como já vimos acima, representadas por \n e \t.
Os números inteiros são representados por uma sequência de um ou mais
dígitos ou por um carácter na forma 'c' (correspondente ao respectivo
código). Exemplos:
123 12 12 'a' '='
Os números reais têm que ter obrigatoriamente um '.', podendo ter uma
parte inteira composta por um ou mais dígitos, uma parte fraccionária da mesma
forma, e uma parte exponencial composta pelo carácter 'E', um sinal '+' ou '-'
opcional e uma outra sequência de um ou mais dígitos. A parte inteira ou a
fraccionária (ou ambas) tem que estar presente. Exemplos:
12. .23
12.23 12.E12 12.23E-2
.12E+2
Os nomes das variáveis e funções têm que começar por uma letra ou
pelo carácter '_', seguido de uma sequência de zero ou mais dígitos, letras
ou '_'. Exemplos:
x x1 _x
var _x_y_z X_Y _123
As strings são vectores de inteiros (geralmente representados por
caracteres) terminadas com o inteiro 0. Podem ser representados mais facilmente
usando os caracteres entre um par de ".O inteiro 0 será sempre adicionado
no fim. Exemplos:
"string" "isto é uma string"
Estão pré-definidas quatro funções de entrada/saída:
ler
escrever
ler_caracter
escrever_caracter
Ficheiro com especificação do analisador léxico em lex/flex.
Ultima alteração: quinta-feira, 16 de Novembro de 2000 às 15:39