Title: An
1Análise Sintática Parte 1
- Subfases
- Análise léxica (scanning) transforma o texto do
programa em uma sequëncia de tokens (símbolos
como identificadores, literais, operadores,
palavras-chave, pontuação etc. - Parsing verifica a seqüencia de tokens para
determinar a estrutura das frases. - Representação da estrutura das frases (árvore
sintática abstrata).
2Programa e seqüencia de tokens
- let var y Integerin ! new year
(comentário) y y 1
let
var
Ident.
colon
Ident.
in
let
var
y
Integer
in
Ident.
becomes
Ident.
op
intlit
eot
y
y
1
3Programa após parsing (1)
Program
Single-Command
Declaration
Single-Command
4Programa após parsing (2)
Declaration
Single-Declaration
Type-Denoter
Ident.
Ident.
let
var
Ident.
colon
Ident.
in
let
var
y
Integer
in
5Programa após parsing (3)
Single-Command
Expression
Expression
Primary-Expr.
Primary-Expr.
V-name
V-name
Int-Lit
Ident.
Ident.
op
op
intlit
eot
Ident.
becomes
Ident.
in
1
y
y
in
6Abstract Syntax Trees
Program
LetCommand
AssignCommand
VarDeclaration
BinaryExpr.
SimpleV.
VnameExpr.
SimpleT.
IntExpr.
SimpleV.
Ident.
Ident.
Ident.
Op.
IntLit.
Ident.
y
Integer
y
1
y
7Tokens em Java
- public class Token public byte kindpublic
String spellingpublic Token (byte kind, String
spelling) this.kind kind this.spelling
spelling
8Tokens em Java
- public final static byte IDENTIFIER 0,
INTLITERAL 1, OPERATOR 2, BEGIN 3,
CONST 4, DO 5, ELSE 6, END 7, IF 8,
IN 9, LET 10, THEN 11, VAR 12, WHILE
13, SEMICOLON 14, COLON 15, BECOMES 16,
IS 17, LPAREN 18, RPAREN 19, EOT 20
9Gramáticas
- Uso de EBNF BNF expressões regulares
- , , ( )
- Exemplos
- Mr Ms
- M (rs)
- pst
- Ba(na)
- M(rs)
10BNF estendida
- Expression primary-Expression
(Operator primary-Expression)primary-Expression
Identifier
( Expression )Identifier a b c d
eOperator - /
11Transformações em gramáticas Fatoração à esquerda
12Fatoração à esquerda exemplo
- Single-command V-name expression if
Expression then single-Command if Expression
then single-Command else single-Command - Single-command V-name expression if
Expression then single-Command ( ? else
single-Command)
13Transformações Eliminação de recursão à esquerda
14Eliminação de recursão à esquerda exemplo
- Identifier Letter
Identifier Letter
Identifier Digit - Identifier Letter
Identifier (Letter Digit) - Identifier Letter (Letter Digit)
15Transformações substituição de símbolos não
terminais
- single-Command for Control-Variable
Expression
To-or-Downto Expression do
single-CommandControl-Variable
IdentifierTo-or-Downto to downto - single-Command for Identifier
Expression
(to downto) Expression do single-Command
16Starter sets (conjuntos iniciais)
- starters X é o conjunto de símbolos terminais
que podem iniciar uma string gerada por X - startershis her its h,i
- starters(re)set r,s
17Starter sets definição
- starters?
- starterst t
- startersXY startersX ? startersY,
se X gera ? - startersXY startersX, se X não gera ?
- startersXY startersX ? startersY
- startersX startersX
18Starter sets exemplo
- startersExpression startersprimary-Expr
ession (Operator primary-Expression)
startersprimary-Expression
startersidentifier ? starters (
Expression ) - startersa b c d e ? (
- a , b , c , d , e, (
19Parsing
- Algorítmos de parsing são classificados em
bottom-up parsing e top-down parsing - Definem a ordem em que a parse tree é construída
(na prática ela não é construída de verdade)
20Gramática de micro-inglês
- Sentence Subject Verb Object .Subject I
a Noun the NounObject me a Noun the
NounNoun cat mat ratVerb like is
see sees
21Bottom-up parsing
- O parser examina os símbolos terminais da string
de entrada, da esquerda para a direita, e
reconstrói a árvore sintática de baixo (nós
terminais) para cima (em direção ao nó-raiz). - Exemplo the cat sees a rat .
22Bottom-up parsing
Verb
Noun
Noun
23Top-down parsing
- O parser examina os símbolos terminais da string
de entrada, da esquerda para a direita, e
reconstrói a árvore sintática de cima (nó-raiz)
para baixo (em direção aos nós terminais). - Exemplo the cat sees a rat .
24Top-down parsing
Sentence
Subject
Object
Verb
Noun
Noun
25Recursive descent parsing
- Top-down.
- Grupo de N métodos parseN, um para cada símbolo
não-terminal. - Elimine recursão à esquerda e fatorize à
esquerda. - Cada método faz o parsing de uma frase-Nprivate
void parseNoun()private void parseVerb()privat
e void parseSubject()private void
parseObject()private void parseSentence()
26Parser class
- Public class Parser private TerminalSymbol
currentTerminalprivate void accept
(TerminalSymbol
expectedTerminal)
if (currentTerminal matches expectedTerminal)
currentTerminal next input terminal
else report a syntax error
27parseSentence
- private void parseSentence ( ) parseSubject(
) parseVerb( ) parseObject( )
accept(.)
28parseSubject
- private void parseSubject ( ) if
(currentTerminal matches I) accept(I)
else if (currentTerminal matches a)
accept (a) parseNoun( ) else if
(currentTerminal matches the)
accept (the) parseNoun( ) else report
syntax error
29parseNoun
- private void parseNoun ( ) if (currentTerminal
matches cat) accept(cat) else if
(currentTerminal matches mat)
accept (mat) else if (currentTerminal
matches rat) accept (rat)
else report syntax error
30parse
- private void parse ( ) currentTerminal first
input terminal parseSentence( ) check
that no terminal follows the sentence