You are on page 1of 9

Bison

Introduo ao Bison
Depois do reconhecimento dos tokens, devem ser reconhecidos os statemennts
(construes vlidas, por exemplo, atribuies, declaraes, expresses
aritmticas). Esse processo a anlise sinttica (parsin).
! duas tcnicas principais para parsin"
#op$do%n
Botton$up ( usada no B&'())

Descrio de Gramticas
Descri*o +ormal de sintaxe
)*o descrevem sem,nticas
Existem vrias notaes para ramticas.
-ramticas especi+icam rupos sintticos e especi+icam reras sobre como
construi$los a partir das partes.
Ex" expresses aritmticas envolvem
.onstantes
/, $, 0, 1, 2
$3, /4 (B)5)
B)5 (Backus )aur 5orm) consiste de um con6unto de reras, cada uma descrevendo
uma parte da sintaxe. 7eras envolvem"
(8) s9mbolos terminais" s*o tokens indivis9veis
(:) s9mbolos n*o$terminais" denotam arupamento de acordo com reras.
'*o nomes das construes sendo de+inidas.
7epresentados por ; nome <
=lum s9mbolo n*o$terminal escolhido como inicial.
Exemplo de rera em B)5"
;expr< "> ;termo<
? ;expr< / ;termo<
? ;expr< $ ;termo<
;termo< "> @?8?:?4?A
: vlido
B n*o
1
Bison
://: n*o
@/:$A/4 vlida
.omo na B)5, a ramtica tem s9mbolos terminais e n*o$terminais.
= +erramenta Bison (C=..) um erador automtico de analisadores sintticos.
7estrito para as ramticas livre de contexto, na verdade D=D7(8), ou se6a,
identi+ica a sintaxe com a leitura de apenas um s9mbolo pela +rente.
&sto , decises sobre construes ramaticais s*o sempre poss9veis com no
mximo Elook aheadF de E8F.
O algoritmo de parsing do BISON
Gm analisador lxico recebe um texto e retorna um con6unto de s9mbolos chamados
HtokensH.
.ada HtokenH reconhecido pelo analisador lxico atravs de um padr*o escrito sob
a +orma de uma express*o reular.
.on+orme B&'() lI tokens, os mesmos s*o armaJenados (6unto com o valor
sem,ntico, exemplo" &D, )GK, K=&') na pilha mantida pelo B&'().
Luando n tokens do topo da pilha correspondem a um arupamento de+inido por um
s9mbolo n*o$terminal, +eita uma 7EDGMN( (sai n tokens, entra o n*o$terminal
correspondente).
Empilhamento '!&5#&)-
( ob6etivo reduJir toda a pilha ao s9mbolo n*o$terminal inicial. (Este o en+oOue
botton$up.)
Elook$aheadF de E8F token"
&sto , decises sobre construes ramaticais s*o sempre poss9veis com no
mximo Elook aheadF de E8F.
onde necessrio decidir +aJer um Elook$aheadF para decidir se +aJ shi+tin ou
reduce
Exemplo"
expr" term K=&' expr
? term
2
Bison
P
term" Q(Q expr Q)R
? term QS Q
? )GK
P
Conflito SHIFT !"D#C"
Exemplo"
i+Tstmt" &5 expr #!E) stmt
? &5 expr #!E) stmt ED'E stmt
P
Este con+lito em eral indica ambiuidade na ramtica (pode n*o ser nada)
(bserve Oue Ouando o ED'E o Elook$aheadF poss9vel tanto +aJer um shi+t ou um
reduce (o B&'() +aJ shi+t).
Conflito !"D#C" !"D#C"
! mais de uma rera de redu*o aplicvel. B&'() +aJ o primeiro poss9vel U na
ordem de escrita das reras U .onsiderado o mais rave.
I $ %odo de utili&ao do BISON
V bison analiJa.W (ou bison $oanaliJa.c analiJa.W)
V cc analiJa.tab.c $o executa (ou cc analiJa.c $o executa)
V .1executa
II $ Formato do ar'ui(o BISON
( arOuivo tem Ouatro partes"
XY
declaraes em .
XZ
declaraes do bison
XX
7eras da ramtica (descri*o da ramtica e aes)
XX
3
Bison
c[dio em . adicional

8$ Declara)es em C*
.orresponde \ inclus*o de arOuivos headers (.h), declaraes de variveis,
constantes, etc.
XY
declaraes em ., includes, etc.
]de+ine CC'#C^E double (tipo da WWtext)
XZ
:$ declara)es do +ison
nomes de s9mbolos terminais e n*o$terminais
pode descrever precedIncia e
o tipo, valor sem,ntico dos s9mbolos
Xoption noWW%rap
Xtoken $ declara um s9mbolo terminal sem especi+icar precedIncia ou
associatividade
Xunion U declara a cole*o de tipos dos dados Oue podem ter como valor sem,ntico
Xthon U declara um nome de token para re+erir a um token com m_ltiplos
caracteres
Xriht U declara um s9mbolo terminal Oue associado \ direita
Xle+t U declara um s9mbolo terminal Oue associado \ esOuerda
Xnonassoc U declara um s9mbolo terminal n*o$associativo
XtWpe U declara o tipo de valor sem,ntico para um s9mbolo n*o$terminal
Xstart U especi+ica o s9mbolo inicial da ramtica
Xexpect U declara o n_mero esperado de con+lito shi+t$reduce
4 $ !egras da gramtica (descri*o da ramtica e aes)
4
Bison
De+ine como constru9do cada n*o$terminal
'intaxe"
Descri*o da ramtica =MN(
4.8$ 5orma da descri*o da ramtica"
'intaxe seue a B)5"
'9mbolos terminais e n*o$terminais " identi+icadores P
.onvenes"
)*o$terminais U min_sculas
#erminais U mai_sculas.
#erminais $ ^odem tambm ser constantes" Q/R, Q=R
)*o$terminais U reras de arupamento, ou se6a, de+ini*o dos n*o$terminais.
5ormato"
nt" componente8 componente: componente4 ...
P
onde nt n*o$terminal sendo descrito e componentei representa tanto um terminal
como um n*o$terminal, +inaliJando por P.
Ex" expressao" )GKE7(
P
expressao" expressao Q/Rexpressao
P
K_ltiplas opes podem aparecer reparadamente ou arupadas com ?
Exemplo"
result* comp8 comp: comp4 ...
,
result* comp
,
ou
result" comp8 comp: comp4 ...
- comp
P
5
Bison
'e a seO`Incia de componentes +or vaJia, ent*o a strin vaJia serve.
Exemplo"
input" 10 emptW 01
? line input
P
4.: Gso das aes em ."
#ambm, nesta se*o do arOuivo bison, podem aparecer comandos em . dentro das
reras. Elas s*o da +orma Y .... c[dio em . .... Z
Gsualmente, h uma a*o por rera (no +inal da linha da rera)
= rera comea na primeira coluna e a a*o comea na mesma linha.
=s =MaE' associadas as reras s*o instrues em .. 'e o c[dio estende$se em
vrias linhas, deve$se delimitar com chaves.
.omo +eito o EmatchinF, ou se6a, Ouando uma rera escolhidab
'e s*o encontradas : possibilidades entre as reras usada a Oue consuma maior
texto. .om empate, seue a ordem no arOuivo.
Dependendo do componente da descri*o da rera Oue se dese6a capturar"
.i U valor associado ao i$simo componente
.. $ resultado de uma a*o re+erente a de+ini*o da rera na linha correspondente.
= seO`Incia de carateres correspondente ao terminal de retorno apontada pela
varivel c/ar 011te2t.
( comprimento da seO`Incia est na varivel (lobal) int 11leng.
4 $ !otinas de suporte em C"
)esta parte, pode$se colocar o seu c[dio em .. ( c[dio escrito nesta se*o ser
copiado para o prorama . erado pelo B&'().
=s +unes s*o declaradas na primeira parte do arOuivo e as de+inies encontram$
se na _ltima.
]include Elex.WW.cF
6
Bison
5unes utiliJadas"
4.8 $ main U inicia a anlise sinttica.
De+ault" main() Y WWparse()P 10 para comear o processo de parsin 01Z
4.: $ WWerror $$ emite mensaens de erro OuandoWWparse detecta um erro de
sintaxe.
WWerror (char 0s) Y
print+(Ecn^arou em XscnF,s)P
Z
III $ "2emplo*
Dada uma express*o aritmtica na nota*o polonesa, o prorama deve calcular e
mostrar o resultado.
Exemplo"
4 4 / d
4 4 3 0 A 1 $ $4
E ^ Y ^ e/?$f Z0e$f
^ 5 Y 5 e0?1f Z0
5 cte ? 5 5 2
cte )GK&)#
100000000000000000000000000000001
10 arOuivo meu.lex 01
XY
]include ;ctWpe.h<
10 int nTlinha>8P01
XZ
Xoption noWW%rap
XX
cn Y10 nTlinha//P 01 return(5&KD&)!=)P Z
e@$Bf/ Yreturn()GK)P Z
H/H Yreturn(K=&')P Z
H$H Yreturn(KE)(')P Z
H0H Yreturn(gEhE')P Z
H1H Yreturn(D&g)P Z
H2H Yreturn(Ei^)P Z
7
Bison
. YZ
XX
100000000000000000000000000000000001
10 arOuivo meu.W 01
XY
]de+ine CC'#C^E int
]include ;stdio.h<
]include ;stdlib.h<
]include ;math.h<
]include Hlex.WW.cH
XZ
Xtoken 5&KD&)!=
Xtoken )GK
Xtoken K=&'
Xtoken KE)('
Xtoken gEhE'
Xtoken D&g
Xtoken Ei^
XX
input" 10emptW01
? line input
P
line" 5&KD&)!=
? expr 5&KD&)!= Yprint+ (Hct( valor da expressao ej" XdcnH,V8)PZ
P
expr" expr expr K=&' Y VV > V8 / V:PZ
? expr expr KE)(' Y VV > V8 $ V:PZ
? expr expr gEhE' Y VV > V8 0 V:P Z
? expr expr D&g Y VV > V8 1 V:PZ
? expr expr Ei^ Y VV > po% (V8,V:)PZ
? expr KE)(' Y VV > $V8PZ
? )GK Y VV > atoi(WWtext)PZ
P
XX
10 codio em . 01
main() Y
8
Bison
WWparse()P
Z
int WWerror(char 0s) Y
print+ (H^arou em Xs.cnH,s)P
return (8)P
Z
^assos para a montaem do executvel"
X +lex meu.lex
X bison meu.W
X cc meu.tab.c Uomeu
X .1meu
A B /
84
4 k / 4 A l 0 / $
84
4 A 2
38
2D indicador de E(5

9

You might also like