Compilador

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1454 palavras )
  • Download(s) : 0
  • Publicado : 21 de novembro de 2012
Ler documento completo
Amostra do texto
Tutorial Criando um Pequeno Compilador
Neste tutorial será criado, com instruções passo a passo, um pequeno compilador, ou para ser mais preciso um interpretador, para expressões numéricas.
Neste interpretador serão aceitas espressões com números, as quatro operações básicas e parênteses. Multiplicação e divisão deverão ter prioridade maior que adição e subtração.
Serão detalhadas asespecificações léxica e sintática, será implementado o analisador semântico e por fim será feito um programa para testar os analisadores.
Para este tutorial serão feitos o analisador léxico e o sintático, e os exemplos de código serão em Java, mas em alguns casos serão também dados exemplos em C++ e em Delphi para mostrar as diferênças.

Especificação Léxica
A primeira coisa a se fazer em umaespecificação léxica e saber quais os tokens que deverão ser reconhecidos pelo analisador.
Como neste exemplo vão ser precisos números, operadores e parênteses, já é possível ter uma idéia de quais tokens serão precisos:
• NUMERO
• +
• -
• *
• /
• (
• )
Antes de especificar de fato so tokens, é preciso notar que a especificação léxica é dividida em duas partes:Definições Regulares e Definição dos Tokens.
Os tokens são definidos na segunda parte. Nas definições regulares são definidas expressões auxiliáres, para serem utilizadas na definição dos tokens.

Definições Regulares

Pare este exemplo será feira apenas a seguinte definição:
D : [0-9]
Esta definição diz que D (digito) é qualquer letra entre 0 e 9.

Tokens

Os tokens para este exemplo sãodefinidos da seguinte forma:
"+"
"-"
"*"
"/"
"("
")"
NUMERO : {D}+
 : [\s\t\n\r]*
Primeiro são definidos os operadores. Uma grupo de caracteres entre aspas define um tokens cuja representação é a de string entre aspas.
Em seguida é definido NUMERO. Para este token é fornecida uma expressão regular para representá-lo. Nesta expressão é utilizada a definição regular anteriormente definida. UmNUMERO é um D (digito) repetido uma ou mais vezes. Para utilizar uma definição deve-se colocá-la entre { e }.
Por fim é descrita uma expressão sem um token associado. Isto indica ao analisador que ele deve ignorar esta expressão sempre que encontrá-la. Neste caso devem ser ignorados espaço em branco (\s), tabulação (\t) e quebra de linha (\n e \r).

Expressões Regulares

Esta tabela ilustra aspossíbilidades de expressões regulares. Quaisquer combinações entre estes padrões é possível. Espaços em branco são ignorados (exceto entre " e ").
|a |reconhece a |
|ab |reconhece a seguido de b |
|a|b |reconhece aou b |
|[abc] |recohece a, b ou c |
|[^abc] |reconhece qualquer caractere, exceto a, b e c |
|[a-z] |reconhece a, b, c, ... ou z|
|a* |reconhece zero ou mais a's |
|a+ |reconhece um ou mais a's |
|a? |reconhece um a ou nenhum a. |
|(a|b)* |reconhecequalquer número de a's ou b's |
|. |reconhece qualquer caractere, exceto quebra de linha |
|\123 |reconhace o caractere ASCII 123 (decimal) |


Os operadores posfixos (*, + e ?) tem prioridade máxima. Em seguida está a...
tracking img