Sie sind auf Seite 1von 4

Analisador de Expresoes Aritmeticas usando P4

Yoshitomi Eduardo Maehara Aliaga

Abstract O presente trabalho apresenta uma extensao a um III. ANALISE L EXICO


exemplo feito pelo Roberto Soule em P4 Tutorial 2017 utilizando
conceitos de interpretes de linguagens para estender o numero Consiste em efetuar a leitura real do programa fonte, o
de operandos a mais de dois. qual geralmente esta na forma de fluxo de caracteres. O
rastreador encarga-se de coletar as sequencias dos carateres
I. INTRODUC AO chamados lexemas em unidades significativas denominadas
tokens os quais estao formados por algum padrao, que sao
No presente trabalho e uma extensao do exemplo da como as palavras de um linguagem natural, como o ingles.
calculadora apresentado no P4 Tutorial 2017 por Robert Deste modo, pode-se imaginar que um rastreador realiza
Soule onde podia-se notar que estava feito para uma uma funcao semelhante ao deletreio.
operacao binaria que aceitava dois operandos usando um
cabecalho personalizado o qual enviava o paquete ao switch Cada token compoe-se de um ou mais carateres que se
o qual calcula a resposta e a envia para o usuario. reunem numa unidade antes de que ocorra um processamento
adicional.
O que pode-se observar e que estava limitado para realizar
dois operacoes que eram a adicao e a substracao,neste
trabalho se apresenta as operacoes de produto, divisao,
potencia, modulo e logaritmo decimal os quais serao
definidos por meio de um analisador lexico e um analisador
sintatico o qual permitira ter mais de dois operandos.

Para isto se fara uso de alguns conceitos da teoria dos


compiladores para poder transformar a calculadora num
analisador mais completo de expressoes.

II. INTERPRETE

Um interprete e um tradutor de linguagem, e similar a um


compilador, mas difere deste em que executa o programa
Processo de analise lexico, veja-se [2]
fonte imediatamente, em vez de gerar um codigo objeto que
se executa depois de que se completa a traducao. Formalmente os tokens podem se expressar como ele-
mentos de um alfabeto A, o qual e um conjunto finito de
smbolos.

A = {t1 ,t2 ,t3 , ...,tn }.

Estes smbolos formarao uma cadeia por concatenacao ou


Estrutura de um interprete veja-se [1] combinacao,considerando como uma cadeia vazia, para
Sua principal avantagem e que permitem uma facil definir o conjunto de todas as cadeias incluindo a vazia seria
depuracao. A principal desvantagem dos interpretes, e que assim:
quando um programa e interpretado, costuma executar-se
mais lento de que se estivesse compilado. isto e devido a A = {,t1 ,t2 ,t3 , ...,tn },
que deve fazer o analise de cada sentencia no programa
cada vez que e executado, ja que fez um analise em Em que e chamado a estrela de Kleene.
tempo real. Tambem o acesso a variaveis e mais lento
que um interprete, porque a mapear os identificadores para No caso se queira definir o conjunto sem a cadeia vazia,
armazenar as localizacoes deve se fazer repetidas vezes em pode-se definir assim:
tempo real.
A+ = A
usando os conceitos definidos anteriormente pode-se des- operacoes seja eficientes.
crever uma notacao alternativa chamada expressao regular.
Elas sao recursivamente definidas pelo seguinte conjunto Entre as funcoes que possui podem ignorar os espacios
de regras: em branco, comentarios e outros caracteres ou tokens nao
1) A cadeia vazia e uma expressao regular. precisados para o processo de analise, Avisar dos erros
2) Dado um alfabeto A, entao um elemento de A e uma encontrados nesta fase, levar a conta do numero da linha
expressao regular em A. para inclui-lo no aviso de error.
3) Se P e uma expressao regular em A, entao a repeticao IV. ANALISE SINT ATICO
de 0 ou mais ocorrencias de P, denotada P, tambem
Consiste em receber o codigo fonte na forma de token
e uma expressao regular em A.
que vem do analise lexico e determina-se a estrutura do
4) Se P e Q sao expressoes regulares em A, entao a
programa, ou seja vai se determinar os elementos estruturais
sequencia de P e Q, denotada PQ, tambem e uma
do programa e suas relaciones. Isto e semelhante a realizar
expressao regular em A.
a analise gramatical sob uma frase num linguagem natural.
5) Se P e Q sao expressoes regulares em A, entao a
alternativa entre P e Q, denotada P|Q, tambem e uma
Os resultados da analise sintatico geralmente sao
expressao regular em A.
representados como um arvore de analise gramatical o um
Expressoes regulares sao criadas a partir da aplicacao de arvore sintatico.
tres operadores aos smbolos de um alfabeto. Os operadores
sao a concatenacao, para denotar a operacao de sequencia de
smbolos, | para alternativa e para repeticao. A operacao
de repeticao tem a maior precedencia; a alternativa, a menor.
Quando seja necessario, os parenteses podem ser usados
para alterar ou explicitar essas precedencias.

A operacao de alternativa e comutativa e associativa,


enquanto a concatenacao e associativa mas nao comutativa.
Sejam x, y e z smbolos de um alfabeto. Pela comutatividade,
x|y e o mesmo que y|x, mas xy e diferente de yx. Pela
associatividade, x|y|z equivale a (x|y)|z, assim como xyz e o Arvore Sintatico, veja-se [2]
mesmo que (xy)z.
Geralmente os analisadores sintaticos obtem esta arvore
teorico que permite expressar a ordem dos lexemas tal e
Os seguintes padroes podem ser observados:
como eles aparecem. Essa arvore deve ser o modelo de
Concatenacao: tem a mesma representacao nas duas
onde vai sair o analise semantico. Mas o normal e que se
notacoes, ou seja, um smbolo apos o outro.
utilizamos o metodo de traducao dirigida pela sintaxes nao
Alternativa: o operador | de uma expressao regular
seja necessario gerar a arvore, ja que o parser vai realizar
corresponde, na gramatica, a producoes alternativas para um
as acoes semanticas e vai incorporar os metodos para fazer
mesmo smbolo nao-terminal.
uma representacao intermediaria e avisara dos erros e sua
Repeticao: o operador de repeticao de uma expressao
recuperacao.
regular corresponde, na gramatica, a uma producao recursiva.
Se a expressao permite zero ocorrencias do padrao, entao a
Tambem estes podem ser representados por gramaticas,
regra que estabelece o fim da recursao leva a cadeia vazia.
como um formalismo para geracao de todas as palavras de
uma linguagem. Uma gramatica permite derivar (gerar)
Os tokens podem possuir uma estrutura
todas as palavras de uma linguagem.
hnombre de Token, Valor de Tokeni,esto vai ser guardado em
O qual pode-se representar com a seguinte expressao:
uma tabela de smbolos que vai estar tanto nesta fase como
na seguinte.
G = {VT ,VNT , P, S}
A tabela de smbolos e uma estrutura de dados que possui Em que:
informacao sob os identificadores definidos por el usuario, VT : um conjunto dos smbolos terminais, ou seja, smbolos
ja sejam constantes, variaveis, tipos ou outros. Tal que pode que podem compor cadeias validas da linguagem.
conter informacao de diversa natureza, deve-se fazer de VN : um conjunto dos smbolos nao-terminais, ou seja,
forma que sua estrutura nao seja uniforme, e dizer nao salva smbolos que sao utilizados como auxiliares na expressao
a mesma informacao sob uma variavel do programa que das regras da linguagem.
sob um tipo definido pelo usuario. As funcoes de dicionario P: um conjunto de producoes expressas na forma ,
de dados e sua estrutura pode ser uma tabela de hash, com (VT VN )+ e (VT VN ) .
um arvore binario de pesquisa, etc. De tal forma que as S: tal que SinVN , o smbolo sentencial, ponto de partida na
criacao de qualquer sentenca na linguagem.

Neste caso deve ser uma gramatica livre de contexto,


Onde uma gramatica livre de contexto e um tipo de
gramatica que tem todas as suas producoes com apenas um
smbolo do lado esquerdo. O lado direito das producoes
pode ter qualquer quantidade de smbolos e ser recursivo,
ou seja, com o mesmo smbolo no lado esquerdo e no lado
direito da producao.

O tipo gramatica apresentado anteriormente possui quatro


elementos: Extraido de [3]

1) Um conjunto de smbolos terminais, os que algumas P4 mesmo e independente de um protocolo permite para
vezes sao conhecidos como tokens. Os terminais sao as expressoes dos protocolos do plano de redirecionamento.
os smbolos elementais do linguagem definido pela Um programa P4 especifica os seguintes para cada elemento
gramatica. de redirecionamento.
2) Um conjunto de nao-terminais, as que algumas vezes Definicoes de Cabecalho: o formato (o conjunto de
sao conhecidos como variaveis sintaticas. Cada nao ter- campos e seus tamanhos) de cada cabecalho dentro de
minal representa um conjunto de cadeias ou terminais cada pacote.
3) Um conjunto de Producoes, em onde cada producao Grafo de Parser: a sequencia de cabecalho permitido
consiste de um terminal, o qual e chamado encabecado dentro do pacote.
ou lado esquerdo da producao, uma seta e uma sequen- Definicoes de Tabelas: o tipo de lookup a realizar, os
cia de terminais e nao-terminais, chamada corpo ou campos de entrada que vai ser usados, as acoes que
lado direito da producao. A intencao intuitiva de uma podem ser aplicadas, e as dimensoes de cada tabela.
producao e especificar uma das formas escritas de uma Definicoes de Acciones: compone acoes que tem um
instrucao. Se o nao terminal do encabecado representa conjunto de acoes primitivas.
a uma instrucao, entao o corpo representa uma forma Layout de Pipeline e controle de fluxo: o layout de
escrita da instrucao. tabelas dentro o pipeline e do fluxo do pacote atraves
4) Uma designacao de um dos nao-terminais como o do pipeline.
simbolo inicial.
P4 direciona as configuracoes dos elementos de redire-
cionamento. uma vez configurado, as tabelas podem ser
preenchidas e o processamento de pacotes toma lugar.

V. LINGUAGEM P4
VI. PROPOSTA

P4 e uma linguagem declarativa para expressar como os vamos manter a estrutura de arquivos originais do
pacotes vao ser processados por o pipeline de um elemento exemplo de Soule porem para poder utilizar mais de dois
de encaminhamento tais como um switch, NIC, router ou operandos tive-se que fazer um analise dos elementos
um appliance de funcao da rede. necessarios para construir a expressao para isto, e necessario
apresentar diagramas de sintaxes junto com suas expressoes
Esta baseado em um modelo de encaminhamento abstrato regulares.
que consiste em um parser e tambem num conjunto de
recursos de tabelas match+action, divididas entre ingress e inteiro [1 9][0 9]
egress. O parser identifica os cabecalhos presentes em cada
pacote que chega, cada tabela match + action realiza um 0..9
lookup num subconjunto de campos do cabecalho e aplica
as acoes correspondentes ao primeiro match dentro de cada
s0 s1
tabela. 0..9

operadores [+ /%()]
/ Tal que P4 e ver sao campos de reconhecimento do pacote,
cod e um codigo que vai dizer que e uma operacao
aritmetica, O ParseResponse e a resposta do parser e o
( Result e a resposta do redirecionamento do pacote.
)
s0 s1 A. Como Executa-lo
% Primeiro descomprimir o arquivo TF.zip
Logo ingressar a pasta TF/anaarit
+ Depois executar .
run.sh
funcoes pow | log Depois escrever py h1 calc.py
Finalmente escrever a sentencia(exemplo 3+4+5)
pow VII. CONCLUS OES
s0 s1 O presente trabalho aporta uma ideia que poderia ser
melhorada acrescentando mais operacoes tais como funcoes
log trigonometricas, factorial, calculos de media, mediana, etc.

se queremos conhecer se os elementos estao relacionados, Tambem poderia servir de base para um analisador de
vamos fazer o analise sintatico para isto constru-se uma expressoes mais geral onde poderia se ter concatenacoes de
gramatica apresentada a continuacao: cadeias, reconhecimento de padroes, etc.
R EFERENCES
expr := term + term | term term
[1] A. Aho, J. Ullman, and R. Sethi, Compiladores: Principios, Tecnicas
term := f actor f actor | f actor / f actor | f actor % f actor e Ferramentas, 1st ed. LTC - Livros Tecnicos e Cientificos Editora
f actor := (expr) | pow (expr) | log (expr) | num S.A, 1995.
num := digito num | digito [2] I. Ricarte, Introducao a Compilacao, 1st ed. Elsevier - Campus, 2008.
[3] T. P. L. Consortium, P416 Language Specification, 2017.
digito := 0|1|2|3|4|5|6|7|8|9 [4] K. Louden, Construccion de compiladores principios y practica,
1st ed. PWS Publishing Company, 1997.
[5] A. Aho, J. Ullman, M. S. Lam, and R. Sethi, Compilers: Principles,
A gramatica esta feita com as operacoes de adicao e Techniques, and Tools, 2nd ed. Pearson Education, 2006.
substracao num nvel diferente as de produto, divisao e [6] S. G. Rojas and M. A. M. Mata, Compiladores:Traductores y Compi-
ladores con Lex/Yacc, JFlex/Cup y JavaCC, 1st ed. Universidad de
modulo assim tambem num nvel diferente as de potencia e Malaga, 2005.
logaritmo decimal por motivos da jerarquia das operacoes [7] J. R. Catalan, Compiladores: Teora e implementacion, 1st ed. RC
fazendo que a gramatica nao seja ambgua ou seja que no Libros, 2010.
[8] P. B. Menezes, Linguagens Formais e Automatos, 3rd ed. Editora
momento de fazer o processo de rastreio ou derivacao o Sagra Luzzato, 2000.
caminho seja claro. [9] R. Spivak, Lets build a simple interpreter, 2015. [Online].
Available: https://ruslanspivak.com
[10] T. P. L. Consortium, The P4 Language Specification, 2015.
Para a analise vamos utilizar um analise sintatico [11] R. Soule, Implementing a p4 calculator, 2017. [Online]. Available:
descendente pela facilidade de implementacao. A https://github.com/p4lang/tutorials/tree/master/P4D2 2017/exercises/calc
[12] Diccionario informatico/tecnologico. [Online]. Available:
Implementacao da parte do Parser foi feita em Python http://www.alegsa.com.ar/Diccionario/diccionario.php
e parte do parser em P4 ja que P4 nao possui as funcoes
matematicas necessarias,para isto em P4 criei uma tabela
que somente me permita aceitar um valor fixo e um campo
chamado res para que receba o resultado das operacoes pelo
pacote para enviar para o switch e este retorne a resposta
para o usuario

O cabecalho proposto e o seguinte:

P 4 ver cod
ParseResponse
Result