an lise sint tica parte 1 l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Análise Sintática – Parte 1 PowerPoint Presentation
Download Presentation
Análise Sintática – Parte 1

Loading in 2 Seconds...

play fullscreen
1 / 27

Análise Sintática – Parte 1 - PowerPoint PPT Presentation


  • 133 Views
  • Uploaded on

Aná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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Análise Sintática – Parte 1' - jorryn


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
an lise sint tica parte 1
Aná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).
programa e seq encia de tokens
Programa 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

programa ap s parsing 1
Programa após parsing (1)

Program

Single-Command

Declaration

Single-Command

programa ap s parsing 2
Programa após parsing (2)

Declaration

Single-Declaration

Type-Denoter

Ident.

Ident.

let

var

Ident.

colon

Ident.

in

let

var

y

:

Integer

in

programa ap s parsing 3
Programa após parsing (3)

Single-Command

Expression

Expression

Primary-Expr.

V-name

Primary-Expr.

V-name

Ident.

Int-Lit

Ident.

op

op

intlit

eot

in

Ident.

becomes

Ident.

+

1

in

y

:=

y

abstract syntax trees
Abstract Syntax Trees

Program

LetCommand

AssignCommand

VarDeclaration

BinaryExpr.

SimpleV.

VnameExpr.

SimpleT.

IntExpr.

SimpleV.

Ident.

Ident.

Ident.

Op.

IntLit.

Ident.

y

Integer

y

y

+

1

tokens em java
Tokens em Java

public class Token {public byte kind;public String spelling;public Token (byte kind, String spelling) { this.kind = kind; this.spelling = spelling;}…

tokens em java8
Tokens 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;}

gram ticas
Gramáticas
  • Uso de EBNF: BNF + expressões regulares:
    • | , *, ( )
  • Exemplos:
    • Mr |Ms
    • M (r|s)
    • ps*t
    • Ba(na)*
    • M(r|s)*
bnf estendida
BNF estendida

Expression ::= primary-Expression (Operatorprimary-Expression)*primary-Expression ::= Identifier | (Expression)Identifier ::= a | b | c | d | eOperator ::= + | - | * | /

fatora o esquerda exemplo
Fatoração à esquerda: exemplo
  • Single-command ::= V-name := expression | if Expression then single-Command | if Expression then single-Commandelse single-Command
  • Single-command ::= V-name := expression | if Expression then single-Command (  | else single-Command)
elimina o de recurs o esquerda exemplo
Eliminação de recursão à esquerda: exemplo
  • Identifier ::= Letter | Identifier Letter | Identifier Digit
  • Identifier ::= Letter | Identifier (Letter | Digit)
  • Identifier ::= Letter (Letter | Digit)*
transforma es substitui o de s mbolos n o terminais
Transformaçõ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
parsing
Parsing
  • 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)
gram tica de micro ingl s
Gramá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
bottom up parsing
Bottom-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 .
bottom up parsing19
Bottom-up parsing

the cat sees a rat .

Sentence

Verb

Subject

Object

Noun

Noun

top down parsing
Top-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 .
top down parsing21
Top-down parsing

Sentence

the cat sees a rat .

Subject

Verb

Object

Noun

Noun

recursive descent parsing
Recursive 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-N:private void parseNoun();private void parseVerb();private void parseSubject();private void parseObject();private void parseSentence();
parser class
Parser class

Public class Parser {private TerminalSymbol currentTerminal;private void accept (TerminalSymbol expectedTerminal) { if (currentTerminal matches expectedTerminal) currentTerminal = next input terminal; else report a syntax error}

parsesentence
parseSentence

private void parseSentence ( ) { parseSubject( ); parseVerb( ); parseObject( ); accept(‘.’);}

parsesubject
parseSubject

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}

parsenoun
parseNoun

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}

parse
parse

private void parse ( ) { currentTerminal = first input terminal; parseSentence( );check that no terminal follows the sentence}