SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE
CAMPUS DE NATAL
Compiladores
Analisador léxico
Natal/Dezembro/2011
UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE - UERN
Campus de Natal
2011
Construção de um analisador Léxico da linguagem C++
Componentes: Acássio dos Anjos
Helder Fabrício
Rafael Jullian
Thaise Regina
Natal/Dezembro/2012
UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE - UERN
Campus de Natal
2011
SUMÁRIO
1. Linguagem ....................................................................................................................4
2. Palavras-Chave da linguagem.....................................................................................7
3. AFN’s e AFD’s ..............................................................................................................8
3. Implementação.............................................................................................................13
1. Linguagem
A linguagem de programação é um conjunto de instruções e uma série de convenções
lexical projetado especificamente para orientar computadores o que fazer.
Ao escolher uma linguagem de programação para fazer um projeto, muitas
considerações diferentes podem ser tomadas. Primeiro, é preciso decidir o que é conhecido
como o nível da linguagem de programação. O nível determina o quão perto do hardware a
linguagem de programação é. Nas línguas de nível inferior, as instruções são escritas
pensando-se diretamente na interface de interação com hardware, enquanto que em
linguagens de "alto nível" um código mais abstrato (ou conceitual) é escrito.
Geralmente, o código de alto nível é mais portátil, o que significa que pode trabalhar
em mais máquinas diferentes, com um menor número de modificações, e um maior número
de reutilizações, enquanto que uma linguagem de baixo nível essa portabilidade é limitada
pelas peculiaridades do hardware que foi escrito para. No entanto, a vantagem de código de
baixo nível é que é geralmente mais rápido devido ao fato de que ele é realmente escrito
aproveitando as possibilidades de uma máquina específica.
A maior ou menor grau de programação deve ser escolhido para um projeto específico,
dependendo do tipo de programa que está sendo desenvolvido. Por exemplo, quando um
driver de hardware é desenvolvido para um sistema operacional, obviamente, um nível muito
baixo é usado para a programação. Enquanto que quando grandes aplicações são
desenvolvidas geralmente um nível mais elevado é escolhido, ou uma combinação de peças
críticas escritas em linguagens de baixo nível e outros nas mais altas.
Apesar de existirem línguas que são claramente pensadas para serem de baixo nível,
como ASSEMBLY, cujos conjuntos de instruções são adaptados para cada máquina o código
é feito para e outros idiomas são inerentemente as linguagens de nível alto, como o Java, que
é projetado para ser totalmente independente de a plataforma onde vai correr. A linguagem
C++ está em uma posição intermediária, uma vez que pode interagir diretamente com o
hardware quase sem limitações, e pode usá-la de maneira bem abstrata pelas camadas mais
baixas e funciona como uma das mais poderosas linguagens de alto nível.
A linguagem C++ apresenta algumas características de linguagem de alto nível que
podem ser bastante atraentes para os usuários:
• Programação orientada a objeto
A possibilidade de orientar a programação de objetos permite ao programador criar
aplicações a partir de um ponto de vista mais como uma comunicação entre objetos em vez de
uma seqüência estruturada de código. Além disso, permite uma maior reutilização de código
de uma maneira mais lógica e produtiva.
• Portabilidade
Você pode praticamente compilar o mesmo código C++ em quase qualquer tipo de
sistema de computador e do funcionamento sem fazer qualquer alteração. C++ é o mais
utilizado e a linguagem de programação mais portátil no mundo.
• Brevidade
Um código escrito em C++ é muito curto em comparação com outras línguas, desde o
uso de caracteres especiais é preferível às palavras-chave, poupando algum esforço para o
programador (e prolongar a vida de nossos teclados!).
• Programação modular
Corpo de um aplicativo em C++ pode ser composto de vários arquivos fontes de
código que são compilados separadamente e depois interligados. Economizando tempo, uma
vez que não é necessário recompilar a aplicação completa ao fazer uma única alteração, mas
apenas o arquivo que a contém. Além disso, esta característica permite linkar código C++
com código produzido em outras línguas, como o Assembler ou C.
• Compatibilidade com C
C++ é compatível com a linguagem C. Qualquer código escrito em C pode ser
facilmente incluído em um programa C++, sem fazer qualquer alteração.
• Velocidade
O código resultante de uma compilação C++ é muito eficiente, devido certamente à
sua dualidade como linguagem de alto nível e de baixo nível e ao tamanho reduzido da
própria linguagem.
2. Palavras-chave da linguagem
São palavras padrão da linguagem que são utilizadas para a estruturação do código,
referente às suas operações, sejam elas rotinas cíclicas da linguagem (como imprimir valores)
ou rotinas matemáticas e booleanas.
• Booleanas: diz respeito a palavras usadas em operações booleanas.
ERbooleanas = (and + or + xor + not)
• Tipos de dados: diz respeito aos tipos de dados que são reconhecidos pela linguagem e
que são utilizados para resolver os problemas algorítmicos.
ERtiposdedados = (char + int + bool + float + double + string + mystring)
• Operadores: diz respeito ao conjunto dos operadores aritméticos, incremento,
decremento, aritmético e atribuição, relacional.
ERoperadores = (+ - + = + * + / + %)
• Entrada e saída: diz respeito ao conjunto de palavras chaves que orientam o código a
ler ou imprimir dados (fornecidos pelo usuário)
ERinput/output = (int + cin + cout + getline + stringstream)
• Controle: diz respeito ao conjunto de palavras-chave usadas para orientar no controle
de certos trechos do código e limitar a fazer operações obedecendo à alguns critérios.
ERcontrol= (if + eles + eles if + while + do + for + continue + break + goto + exit + switch +
case +default + catch + )
• Caracteres especiais: diz respeito aos caracteres especiais utilizados para diferentes
situações rotineiras da linguagem, como comentários, incluir parágrafo, incluir quebra
de linha, incluir espaço, declaração de bibliotecas, etc.
ERcaracteres-especiais = ( / + * + // + ; + , + : + ( + ) + [ + ] + { + } + # + n + “ + ” +
a + t + ' + ” + v + r + f + b)
• Funções: diz respeito as palavras usadas para dividir o código em tarefas menores,
viabilizando a reutilização das operações.
ERfunções = (include + void + system + pause + main + getch + puts + return + cout +
cin)
3. AFN’s e AFD’s
AFN: Um autômato finito não determinístico é uma
onde Q e Σ são conjuntos não
• Q é o conjunto de estados
• Σ é o alfabeto;
• q0 é o estado inicial;
• F é o conjunto de estados válidos (ou de aceitação)
• 2Q
significa o conjunto das partes de Q
AFD: Um autômato finito não determinístico é uma
M = (S, Σ, T, s, A
• um conjunto finito de estados (
• um conjunto finito de símbolos chamado de al
• uma função de transição (
• um estado inicial (s
• um conjunto de estados f
Um autômato finito não determinístico é uma quíntupla:
são conjuntos não-vazios, , e
é o conjunto de estados;
;
é o conjunto de estados válidos (ou de aceitação);
nifica o conjunto das partes de Q.
Um autômato finito não determinístico é uma quíntupla:
A)
um conjunto finito de estados (S)
um conjunto finito de símbolos chamado de alfabeto (Σ)
uma função de transição (T : S × Σ → S)
∈ S)
um conjunto de estados finais(A ⊆ S)
Caracteres especiais:
Operadores:
Palavras-chave:
Funções:
Tipos de dados
4. Implementação
Main: onde está especificada a localização do arquivo e é feita a leitura de cada palavra para
a futura comparação dentro das classes. Caso o arquivo não esteja no local especificado é
retornada uma mensagem de erro.
package compilador;
import java.io.*;
public class Compilador {
public static void main(String[] args) {
palavras_chaves p_c = new palavras_chaves();
caracteres_especiais c_e = new caracteres_especiais();
tipos_de_dados t_d_d = new tipos_de_dados();
operadores op = new operadores();
funcoes fc = new funcoes();
forma_identificador f_i = new forma_identificador();
tokens valido = new tokens();
tokens invalido = new tokens();
int linhas = 0;
String[] vetorlinha;
try
{
BufferedReader entrada = new BufferedReader(new
FileReader("C:UsersAcássioDocumentsNetBeansProjectsCompila
dorsrccompiladorarquivo.txt"));
while(entrada.ready())
{
vetorlinha = entrada.readLine().split(" ");
linhas++;
for(int x=0;x<vetorlinha.length;x++){
if(p_c.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else if(c_e.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else if(t_d_d.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else if(op.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else if(fc.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else if(f_i.lexico(vetorlinha[x]))
{
valido.token.add(vetorlinha[x]);
valido.linha.add(String.valueOf(linhas));
}else
{
invalido.token.add(vetorlinha[x]);
invalido.linha.add(String.valueOf(linhas));
}
}
}
if(invalido.token.isEmpty())
{
}else
{
for(int x=0;x<(invalido.token.size());x++)
{
System.out.println("caracter " +
invalido.token.get(x) + " lexicamente inválido na linha " +
invalido.linha.get(x));
}
}
}catch(IOException e)
{
System.out.println("Erro ao tentar abrir arquivo!");
}
}
}
Classe caracteres especiais: é feita a comparação com cada um dos caracteres especiais
determinados pelas nossas expressões regulares.
package compilador;
import java.util.ArrayList;
public class caracteres_especiais {
ArrayList<String> caracteres = new ArrayList();
public caracteres_especiais()
{
caracteres.add("/*");
caracteres.add("*/");
caracteres.add("//");
caracteres.add(";");
caracteres.add(",");
caracteres.add(":");
caracteres.add("()");
caracteres.add("[]");
caracteres.add("{}");
caracteres.add("#");
caracteres.add("n");
caracteres.add("""");
caracteres.add("t");
caracteres.add("'");
caracteres.add(""");
caracteres.add("r");
caracteres.add("f");
caracteres.add("b");
}
public boolean lexico(String token)
{
return caracteres.contains(token);
}
}
Classe funções: é feita a comparação com cada um das palavras-chave das funções
determinados pelas nossas expressões regulares.
package compilador;
import java.util.ArrayList;
public class funcoes {
ArrayList<String> funcao = new ArrayList();
public funcoes()
{
funcao.add("system");
funcao.add("pause");
funcao.add("main");
funcao.add("getche");
funcao.add("puts");
funcao.add("return");
funcao.add("cout");
funcao.add("cin");
}
public boolean lexico(String token)
{
return funcao.contains(token);
}
}
Classe funções: é feita a comparação com cada um dos operadores determinados pelas nossas
expressões regulares.
package compilador;
import java.util.ArrayList;
public class operadores {
ArrayList<String> operador = new ArrayList();
public operadores()
{
operador.add("::");
operador.add("++");
operador.add("--");
operador.add(".");
operador.add("->");
operador.add("+");
operador.add("-");
operador.add("!");
operador.add("~");
operador.add("&");
operador.add(".*");
operador.add("*");
operador.add("->*");
operador.add("/");
operador.add("%");
operador.add("<<");
operador.add(">>");
operador.add("<");
operador.add("<=");
operador.add(">");
operador.add(">=");
operador.add("==");
operador.add("!=");
operador.add("^");
operador.add("&&");
operador.add("=");
operador.add("+=");
operador.add("-=");
operador.add("<<=");
operador.add(">>=");
operador.add("&=");
operador.add("^=");
}
public boolean lexico(String token)
{
return operador.contains(token);
}
}
Classe funções: é feita a comparação com cada um das palavras-chave determinados pelas
nossas expressões regulares.
package compilador;
import java.util.ArrayList;
public class palavras_chaves {
ArrayList<String> palavra = new ArrayList();
public palavras_chaves()
{
palavra.add("and");
palavra.add("default");
palavra.add("template");
palavra.add("and_eq");
palavra.add("delete");
palavra.add("not");
palavra.add("this");
palavra.add("else");
palavra.add("operator");
palavra.add("true");
palavra.add("bitand");
palavra.add("enum");
palavra.add("or");
palavra.add("try");
palavra.add("typedef");
palavra.add("export");
palavra.add("private");
palavra.add("typeid");
palavra.add("break");
palavra.add("extern");
palavra.add("case");
palavra.add("catch");
palavra.add("false");
palavra.add("public");
palavra.add("union");
palavra.add("for");
palavra.add("goto");
palavra.add("class");
palavra.add("if");
palavra.add("sizeof");
palavra.add("while");
palavra.add("continue");
palavra.add("struct");
palavra.add("new");
palavra.add("switch");
palavra.add("include");
palavra.add("stdio");
}
public boolean lexico(String token)
{
return palavra.contains(token);
}
}
Classe funções: é feita a comparação com cada um das palavras-chave dos tipos de dados
determinados pelas nossas expressões regulares.
package compilador;
import java.util.ArrayList;
public class tipos_de_dados {
ArrayList<String> dados = new ArrayList();
public tipos_de_dados()
{
dados.add("int");
dados.add("void");
dados.add("float");
dados.add("double");
dados.add("char");
dados.add("bool");
dados.add("wchar_t");
dados.add("short");
dados.add("signed");
dados.add("unsigned");
dados.add("long");
}
public boolean lexico(String token)
{
return dados.contains(token);
}
}
package compilador;
import java.util.ArrayList;
public class tokens {
ArrayList<String> token = new ArrayList();
ArrayList<String> linha = new ArrayList();
}
package compilador;
public class forma_identificador {
char[] maiusculas =
{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'
,'r','s','t','u','v','w','x','y','z'};
char[] minusculas =
{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'
,'R','S','T','U','V','W','X','Y','Z'};
char[] numeros = {'0','1','2','3','4','5','6','7','8','9'};
char[] tokene;
int valido=0;
public boolean lexico(String token)
{
tokene = token.toCharArray();
for(int x=0;x<maiusculas.length;x++)
{
if(maiusculas[x]==tokene[0] || minusculas[x]==tokene[0])
{
valido = valido+1;
break;
}
}
for(int x=1;x<tokene.length;x++)
{
for(int y=0;y<maiusculas.length;y++)
{
//|| minusculas[y]==tokene[x]
if(maiusculas[y]==tokene[x])
{
valido = valido+1;
}
}
for(int y=0;y<numeros.length;y++)
{
if(tokene[x]==numeros[y])
{
valido = valido+1;
}
}
}
if(valido==tokene.length)
{
valido=0;
return true;
}else
valido=0;
return false;
}
}

Mais conteúdo relacionado

Mais procurados

Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem csergiocrespo
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
Apostila de Linguagem C
Apostila de Linguagem CApostila de Linguagem C
Apostila de Linguagem CDaniel Barão
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOJose Augusto Cintra
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem cJefferson Bessa
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem corvel
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoesYuri Passos
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)guest14543db
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1D M
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem cEugenio Caetano
 

Mais procurados (18)

Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Introducao a LPC
Introducao a LPCIntroducao a LPC
Introducao a LPC
 
Apostila de Linguagem C
Apostila de Linguagem CApostila de Linguagem C
Apostila de Linguagem C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Infos algoritmo
Infos algoritmoInfos algoritmo
Infos algoritmo
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Introdução à Linguagem de Programação GO
Introdução à Linguagem de Programação GOIntrodução à Linguagem de Programação GO
Introdução à Linguagem de Programação GO
 
Geração de código linguagem c
Geração de código   linguagem cGeração de código   linguagem c
Geração de código linguagem c
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Aula01 introducao operacoes
Aula01   introducao operacoesAula01   introducao operacoes
Aula01 introducao operacoes
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)
 
Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1Tecnicas programacao i_c_p1
Tecnicas programacao i_c_p1
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
 
5. introducao a linguagem c
5. introducao a linguagem c5. introducao a linguagem c
5. introducao a linguagem c
 

Destaque

Ficha javacc
Ficha javaccFicha javacc
Ficha javaccÆx Lynx
 
Compilers - Using Lex and YACC
Compilers - Using Lex and YACCCompilers - Using Lex and YACC
Compilers - Using Lex and YACCMichel Alves
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Maellson Marques
 
[TUTORIAL] PetitParser
[TUTORIAL] PetitParser[TUTORIAL] PetitParser
[TUTORIAL] PetitParserESUG
 
Compilador analise lexica
Compilador analise lexicaCompilador analise lexica
Compilador analise lexicaAdilmar Dantas
 
Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Maellson Marques
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Maellson Marques
 
Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Aldisio Medeiros
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 

Destaque (14)

Ficha javacc
Ficha javaccFicha javacc
Ficha javacc
 
Compilers - Using Lex and YACC
Compilers - Using Lex and YACCCompilers - Using Lex and YACC
Compilers - Using Lex and YACC
 
Trabalho
TrabalhoTrabalho
Trabalho
 
JavaCC
JavaCCJavaCC
JavaCC
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
[TUTORIAL] PetitParser
[TUTORIAL] PetitParser[TUTORIAL] PetitParser
[TUTORIAL] PetitParser
 
poscomp-Gabarito ano2010
poscomp-Gabarito ano2010poscomp-Gabarito ano2010
poscomp-Gabarito ano2010
 
Compilador analise lexica
Compilador analise lexicaCompilador analise lexica
Compilador analise lexica
 
Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011
 
poscomp-Gabarito ano2011
poscomp-Gabarito ano2011poscomp-Gabarito ano2011
poscomp-Gabarito ano2011
 
Gcc
GccGcc
Gcc
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 

Semelhante a Compiladores

Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfAndreiaCristinaFlore
 
Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicaçõesnataferraz
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_ImplementaçãoWagner Zaparoli
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programaçãoAlbertoVach
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 

Semelhante a Compiladores (20)

Apostila c
Apostila cApostila c
Apostila c
 
15. introducao ao c++
15. introducao ao c++15. introducao ao c++
15. introducao ao c++
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Linguagem C e Dev-C++ Algumas Explicações
Linguagem C e Dev-C++  Algumas ExplicaçõesLinguagem C e Dev-C++  Algumas Explicações
Linguagem C e Dev-C++ Algumas Explicações
 
Técnicas_Implementação
Técnicas_ImplementaçãoTécnicas_Implementação
Técnicas_Implementação
 
Apostila linguagem c
Apostila linguagem cApostila linguagem c
Apostila linguagem c
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de devc++ novo
Apostila de devc++ novoApostila de devc++ novo
Apostila de devc++ novo
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
apostila de dev.pdf
apostila de dev.pdfapostila de dev.pdf
apostila de dev.pdf
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 

Último

Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfFbioFerreira207918
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.denisecompasso2
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do séculoBiblioteca UCS
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedJaquelineBertagliaCe
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfLidianeLill2
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Centro Jacques Delors
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticash5kpmr7w7
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...azulassessoria9
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 

Último (20)

Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdf
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 

Compiladores

  • 1. UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE CAMPUS DE NATAL Compiladores Analisador léxico Natal/Dezembro/2011
  • 2. UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE - UERN Campus de Natal 2011 Construção de um analisador Léxico da linguagem C++ Componentes: Acássio dos Anjos Helder Fabrício Rafael Jullian Thaise Regina Natal/Dezembro/2012
  • 3. UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE - UERN Campus de Natal 2011 SUMÁRIO 1. Linguagem ....................................................................................................................4 2. Palavras-Chave da linguagem.....................................................................................7 3. AFN’s e AFD’s ..............................................................................................................8 3. Implementação.............................................................................................................13
  • 4. 1. Linguagem A linguagem de programação é um conjunto de instruções e uma série de convenções lexical projetado especificamente para orientar computadores o que fazer. Ao escolher uma linguagem de programação para fazer um projeto, muitas considerações diferentes podem ser tomadas. Primeiro, é preciso decidir o que é conhecido como o nível da linguagem de programação. O nível determina o quão perto do hardware a linguagem de programação é. Nas línguas de nível inferior, as instruções são escritas pensando-se diretamente na interface de interação com hardware, enquanto que em linguagens de "alto nível" um código mais abstrato (ou conceitual) é escrito. Geralmente, o código de alto nível é mais portátil, o que significa que pode trabalhar em mais máquinas diferentes, com um menor número de modificações, e um maior número de reutilizações, enquanto que uma linguagem de baixo nível essa portabilidade é limitada pelas peculiaridades do hardware que foi escrito para. No entanto, a vantagem de código de baixo nível é que é geralmente mais rápido devido ao fato de que ele é realmente escrito aproveitando as possibilidades de uma máquina específica. A maior ou menor grau de programação deve ser escolhido para um projeto específico, dependendo do tipo de programa que está sendo desenvolvido. Por exemplo, quando um driver de hardware é desenvolvido para um sistema operacional, obviamente, um nível muito baixo é usado para a programação. Enquanto que quando grandes aplicações são desenvolvidas geralmente um nível mais elevado é escolhido, ou uma combinação de peças críticas escritas em linguagens de baixo nível e outros nas mais altas. Apesar de existirem línguas que são claramente pensadas para serem de baixo nível, como ASSEMBLY, cujos conjuntos de instruções são adaptados para cada máquina o código é feito para e outros idiomas são inerentemente as linguagens de nível alto, como o Java, que
  • 5. é projetado para ser totalmente independente de a plataforma onde vai correr. A linguagem C++ está em uma posição intermediária, uma vez que pode interagir diretamente com o hardware quase sem limitações, e pode usá-la de maneira bem abstrata pelas camadas mais baixas e funciona como uma das mais poderosas linguagens de alto nível. A linguagem C++ apresenta algumas características de linguagem de alto nível que podem ser bastante atraentes para os usuários: • Programação orientada a objeto A possibilidade de orientar a programação de objetos permite ao programador criar aplicações a partir de um ponto de vista mais como uma comunicação entre objetos em vez de uma seqüência estruturada de código. Além disso, permite uma maior reutilização de código de uma maneira mais lógica e produtiva. • Portabilidade Você pode praticamente compilar o mesmo código C++ em quase qualquer tipo de sistema de computador e do funcionamento sem fazer qualquer alteração. C++ é o mais utilizado e a linguagem de programação mais portátil no mundo. • Brevidade Um código escrito em C++ é muito curto em comparação com outras línguas, desde o uso de caracteres especiais é preferível às palavras-chave, poupando algum esforço para o programador (e prolongar a vida de nossos teclados!). • Programação modular Corpo de um aplicativo em C++ pode ser composto de vários arquivos fontes de código que são compilados separadamente e depois interligados. Economizando tempo, uma vez que não é necessário recompilar a aplicação completa ao fazer uma única alteração, mas
  • 6. apenas o arquivo que a contém. Além disso, esta característica permite linkar código C++ com código produzido em outras línguas, como o Assembler ou C. • Compatibilidade com C C++ é compatível com a linguagem C. Qualquer código escrito em C pode ser facilmente incluído em um programa C++, sem fazer qualquer alteração. • Velocidade O código resultante de uma compilação C++ é muito eficiente, devido certamente à sua dualidade como linguagem de alto nível e de baixo nível e ao tamanho reduzido da própria linguagem.
  • 7. 2. Palavras-chave da linguagem São palavras padrão da linguagem que são utilizadas para a estruturação do código, referente às suas operações, sejam elas rotinas cíclicas da linguagem (como imprimir valores) ou rotinas matemáticas e booleanas. • Booleanas: diz respeito a palavras usadas em operações booleanas. ERbooleanas = (and + or + xor + not) • Tipos de dados: diz respeito aos tipos de dados que são reconhecidos pela linguagem e que são utilizados para resolver os problemas algorítmicos. ERtiposdedados = (char + int + bool + float + double + string + mystring) • Operadores: diz respeito ao conjunto dos operadores aritméticos, incremento, decremento, aritmético e atribuição, relacional. ERoperadores = (+ - + = + * + / + %) • Entrada e saída: diz respeito ao conjunto de palavras chaves que orientam o código a ler ou imprimir dados (fornecidos pelo usuário) ERinput/output = (int + cin + cout + getline + stringstream) • Controle: diz respeito ao conjunto de palavras-chave usadas para orientar no controle de certos trechos do código e limitar a fazer operações obedecendo à alguns critérios. ERcontrol= (if + eles + eles if + while + do + for + continue + break + goto + exit + switch + case +default + catch + ) • Caracteres especiais: diz respeito aos caracteres especiais utilizados para diferentes situações rotineiras da linguagem, como comentários, incluir parágrafo, incluir quebra de linha, incluir espaço, declaração de bibliotecas, etc. ERcaracteres-especiais = ( / + * + // + ; + , + : + ( + ) + [ + ] + { + } + # + n + “ + ” + a + t + ' + ” + v + r + f + b) • Funções: diz respeito as palavras usadas para dividir o código em tarefas menores, viabilizando a reutilização das operações. ERfunções = (include + void + system + pause + main + getch + puts + return + cout + cin)
  • 8. 3. AFN’s e AFD’s AFN: Um autômato finito não determinístico é uma onde Q e Σ são conjuntos não • Q é o conjunto de estados • Σ é o alfabeto; • q0 é o estado inicial; • F é o conjunto de estados válidos (ou de aceitação) • 2Q significa o conjunto das partes de Q AFD: Um autômato finito não determinístico é uma M = (S, Σ, T, s, A • um conjunto finito de estados ( • um conjunto finito de símbolos chamado de al • uma função de transição ( • um estado inicial (s • um conjunto de estados f Um autômato finito não determinístico é uma quíntupla: são conjuntos não-vazios, , e é o conjunto de estados; ; é o conjunto de estados válidos (ou de aceitação); nifica o conjunto das partes de Q. Um autômato finito não determinístico é uma quíntupla: A) um conjunto finito de estados (S) um conjunto finito de símbolos chamado de alfabeto (Σ) uma função de transição (T : S × Σ → S) ∈ S) um conjunto de estados finais(A ⊆ S)
  • 13. 4. Implementação Main: onde está especificada a localização do arquivo e é feita a leitura de cada palavra para a futura comparação dentro das classes. Caso o arquivo não esteja no local especificado é retornada uma mensagem de erro. package compilador; import java.io.*; public class Compilador { public static void main(String[] args) { palavras_chaves p_c = new palavras_chaves(); caracteres_especiais c_e = new caracteres_especiais(); tipos_de_dados t_d_d = new tipos_de_dados(); operadores op = new operadores(); funcoes fc = new funcoes(); forma_identificador f_i = new forma_identificador(); tokens valido = new tokens(); tokens invalido = new tokens(); int linhas = 0; String[] vetorlinha; try { BufferedReader entrada = new BufferedReader(new FileReader("C:UsersAcássioDocumentsNetBeansProjectsCompila dorsrccompiladorarquivo.txt")); while(entrada.ready()) { vetorlinha = entrada.readLine().split(" "); linhas++; for(int x=0;x<vetorlinha.length;x++){ if(p_c.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas)); }else if(c_e.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas)); }else if(t_d_d.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas)); }else if(op.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas));
  • 14. }else if(fc.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas)); }else if(f_i.lexico(vetorlinha[x])) { valido.token.add(vetorlinha[x]); valido.linha.add(String.valueOf(linhas)); }else { invalido.token.add(vetorlinha[x]); invalido.linha.add(String.valueOf(linhas)); } } } if(invalido.token.isEmpty()) { }else { for(int x=0;x<(invalido.token.size());x++) { System.out.println("caracter " + invalido.token.get(x) + " lexicamente inválido na linha " + invalido.linha.get(x)); } } }catch(IOException e) { System.out.println("Erro ao tentar abrir arquivo!"); } } } Classe caracteres especiais: é feita a comparação com cada um dos caracteres especiais determinados pelas nossas expressões regulares. package compilador; import java.util.ArrayList; public class caracteres_especiais { ArrayList<String> caracteres = new ArrayList(); public caracteres_especiais() { caracteres.add("/*"); caracteres.add("*/"); caracteres.add("//"); caracteres.add(";"); caracteres.add(","); caracteres.add(":");
  • 15. caracteres.add("()"); caracteres.add("[]"); caracteres.add("{}"); caracteres.add("#"); caracteres.add("n"); caracteres.add(""""); caracteres.add("t"); caracteres.add("'"); caracteres.add("""); caracteres.add("r"); caracteres.add("f"); caracteres.add("b"); } public boolean lexico(String token) { return caracteres.contains(token); } } Classe funções: é feita a comparação com cada um das palavras-chave das funções determinados pelas nossas expressões regulares. package compilador; import java.util.ArrayList; public class funcoes { ArrayList<String> funcao = new ArrayList(); public funcoes() { funcao.add("system"); funcao.add("pause"); funcao.add("main"); funcao.add("getche"); funcao.add("puts"); funcao.add("return"); funcao.add("cout"); funcao.add("cin"); } public boolean lexico(String token) { return funcao.contains(token); } }
  • 16. Classe funções: é feita a comparação com cada um dos operadores determinados pelas nossas expressões regulares. package compilador; import java.util.ArrayList; public class operadores { ArrayList<String> operador = new ArrayList(); public operadores() { operador.add("::"); operador.add("++"); operador.add("--"); operador.add("."); operador.add("->"); operador.add("+"); operador.add("-"); operador.add("!"); operador.add("~"); operador.add("&"); operador.add(".*"); operador.add("*"); operador.add("->*"); operador.add("/"); operador.add("%"); operador.add("<<"); operador.add(">>"); operador.add("<"); operador.add("<="); operador.add(">"); operador.add(">="); operador.add("=="); operador.add("!="); operador.add("^"); operador.add("&&"); operador.add("="); operador.add("+="); operador.add("-="); operador.add("<<="); operador.add(">>="); operador.add("&="); operador.add("^="); } public boolean lexico(String token) { return operador.contains(token); } }
  • 17. Classe funções: é feita a comparação com cada um das palavras-chave determinados pelas nossas expressões regulares. package compilador; import java.util.ArrayList; public class palavras_chaves { ArrayList<String> palavra = new ArrayList(); public palavras_chaves() { palavra.add("and"); palavra.add("default"); palavra.add("template"); palavra.add("and_eq"); palavra.add("delete"); palavra.add("not"); palavra.add("this"); palavra.add("else"); palavra.add("operator"); palavra.add("true"); palavra.add("bitand"); palavra.add("enum"); palavra.add("or"); palavra.add("try"); palavra.add("typedef"); palavra.add("export"); palavra.add("private"); palavra.add("typeid"); palavra.add("break"); palavra.add("extern"); palavra.add("case"); palavra.add("catch"); palavra.add("false"); palavra.add("public"); palavra.add("union"); palavra.add("for"); palavra.add("goto"); palavra.add("class"); palavra.add("if"); palavra.add("sizeof"); palavra.add("while"); palavra.add("continue"); palavra.add("struct"); palavra.add("new"); palavra.add("switch"); palavra.add("include"); palavra.add("stdio"); } public boolean lexico(String token) { return palavra.contains(token); } }
  • 18. Classe funções: é feita a comparação com cada um das palavras-chave dos tipos de dados determinados pelas nossas expressões regulares. package compilador; import java.util.ArrayList; public class tipos_de_dados { ArrayList<String> dados = new ArrayList(); public tipos_de_dados() { dados.add("int"); dados.add("void"); dados.add("float"); dados.add("double"); dados.add("char"); dados.add("bool"); dados.add("wchar_t"); dados.add("short"); dados.add("signed"); dados.add("unsigned"); dados.add("long"); } public boolean lexico(String token) { return dados.contains(token); } } package compilador; import java.util.ArrayList; public class tokens { ArrayList<String> token = new ArrayList(); ArrayList<String> linha = new ArrayList(); } package compilador; public class forma_identificador { char[] maiusculas = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q' ,'r','s','t','u','v','w','x','y','z'}; char[] minusculas = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q' ,'R','S','T','U','V','W','X','Y','Z'}; char[] numeros = {'0','1','2','3','4','5','6','7','8','9'}; char[] tokene; int valido=0; public boolean lexico(String token) {
  • 19. tokene = token.toCharArray(); for(int x=0;x<maiusculas.length;x++) { if(maiusculas[x]==tokene[0] || minusculas[x]==tokene[0]) { valido = valido+1; break; } } for(int x=1;x<tokene.length;x++) { for(int y=0;y<maiusculas.length;y++) { //|| minusculas[y]==tokene[x] if(maiusculas[y]==tokene[x]) { valido = valido+1; } } for(int y=0;y<numeros.length;y++) { if(tokene[x]==numeros[y]) { valido = valido+1; } } } if(valido==tokene.length) { valido=0; return true; }else valido=0; return false; } }