A linguagem compL é uma linguagem simples usada para o ensino de compiladores em cursos de graduação. A linguagem compL inclui expressões, fluxo de controle básico, funções recursivas e verificação de tipos.
Os caracteres de espacejamento não têm papel significativo em programas compL e devem ser desconsiderados pelo analisador léxico.
a=5; e a = 5;
retornam tokens para a, =, 5 e ;,
desconsiderando caracteres de espacejamento.Comentários começam com // e se estendem até o final da linha.
Comentários devem ser descartados pelo analisador léxico.
a=5; // comentário no estilo C++São compostos por letras maiúsculas e minúsculas, dígitos decimais e underscores. Identificadores devem começar com uma letra e podem ter até 256 caracteres. Caracteres maiúsculos e minúsculos em identificadores são diferenciados.
i x9 x9_ my_str name4you NomeCompletox9 e X9 são dois identificadores distintos.array boolean else false function if
integer print return true void while
As palavras-chave, sempre escritas em letras minúsculas, são reservadas e não podem ser usadas como identificadores.
function é palavra reservada, porém Function não é.integer e boolean.As palavras reservadas true e false são literais do tipo boolean.
array é usada na declaração de arrays, único tipo estruturado da linguagem. + - * / % ! < > = : ; , ( ) [ ] { }
<= >= == !=
integerUma constante inteira é uma sequência não-vazia de dígitos decimais.
booleanHá duas constantes válidas para o tipo boolean: false e true.
? (caractere não é um símbolo válido)
Obs.: 5abc não é erro léxico.
O analisador deve retornar o token NUM, seguido por token ID.
x: integer;
y: integer = 123;
b: boolean = false;
x: integer = 65;
y: boolean = true;
if(x?0) // erro léxico: símbolo inválido
f: integer = 0;
if (f<100) ... etc.
b: array [2] boolean = {true,false};
x: integer = 0;
if(b[0]) x = x+1;
print x;
main: function integer () = {
i: integer = 10;
while (i > 0) ... etc.
}
TBD.
TBD.
Adaptado do material didático cedido pelo Prof. Vinicius Petrucci e do livro de D. Thain.