Presentation is loading. Please wait.

Presentation is loading. Please wait.

Análise Sintática – Parte 2 Árvores Sintáticas Abstratas (ASTs) Scanning.

Similar presentations


Presentation on theme: "Análise Sintática – Parte 2 Árvores Sintáticas Abstratas (ASTs) Scanning."— Presentation transcript:

1 Análise Sintática – Parte 2 Árvores Sintáticas Abstratas (ASTs) Scanning

2 Representação da árvore (Programa) Program C

3 ASTs em Java – Programas public abstract class AST { … } public class Program extends AST { public Command C; … }

4 Representação da árvore (Comando) IfCommand EC2C2 WhileCommand EC LetCommand DC AssignCommand E CallCommand IdentifierE spelling SequentialCommand C1C1 C2C2 V C1C1

5 ASTs em Java – Comandos public abstract class Command extends AST { … } public class AssignCommand extends Command { public Vname V; public Expression E; … } public class CallCommand extends Command { public Identifier I; public Expression E; … }

6 ASTs em Java – Comandos (2) public class SequentialCommand extends Command { public Command C1,C2; … } public class IfCommand extends Command { public Expression E; public Command C1,C2; … }

7 ASTs em Java – Comandos (3) public class WhileCommand extends Command { public Expression E; public Command C; … } public class LetCommand extends Command { public Declaration D; public Command C; … }

8 Representação da árvore (Expressão) BinaryExpression E1E1 E2E2 UnaryExpression OperatorE IntegerExpression IntegerLiteral spelling VnameExpression V Operator spelling

9 ASTs em Java – Expressões public abstract class Expression extends AST { … } public class UnaryExpression extends Expression { public Operator O; public Expression E; … } public class BinaryExpression extends Expression { public Operator O; public Expression E1,E2; … }

10 Representação da árvore (V-name) SimpleVname Identifier spelling

11 ASTs em Java – Vname public abstract class Vname extends AST { … } public class SimpleVname extends Vname { public Identifier I; … }

12 Representação da árvore (Declaração) SequentialDeclaration D2D2 ConstDeclaration IdentifierE spelling D1D1 VarDeclaration IdentifierE spelling

13 ASTs em Java – Declaração public abstract class Declaration extends AST { … } public class ConstDeclaration extends Declaration { public Identifier I; public Expression E; … } public class VarDeclaration extends Declaration { public Identifier I; public TypeDenoter T; … }

14 Representação da árvore (Denotador de Tipos) SimpleTypeDenoter Identifier spelling

15 ASTs em Java – Denotador de Tipos public abstract class TypeDenoter extends AST { … } public class SimpleTypeDenoter extends TypeDenoter { public Identifier I; … }

16 ASTs em Java – Terminais public abstract class Terminal extends AST { public String spelling; … } public class Identifier extends Terminal { …} public class IntegerLiteral extends Terminal { …} public class Operator extends Terminal { …}

17 ASTs em Java – Construção da árvore private AST N parseN ( ) { AST N itsAST; parse N, at the same time constructing itsAST return itsAST; }

18 ASTs em Java – Exemplo: ParseSingleDeclaration private Declaration parseSingleDeclaration ( ) { Declaration declAST; switch (currentToken.kind) { case Token.CONST: { acceptIt( ); Identifier iAST = parseIdentifier( ); accept(Token.IS); Expression eAST = parseExpression( ); declAST = new ConstDeclaration(iAST, eAST); } break; case Token.VAR: … return declAST; }

19 ASTs em Java – Exemplo: ParseCommand private Declaration parseCommand ( ) { Command c1AST = parseSingleCommand( ); while (currentToken.kind == Token.SEMICOLON) { acceptIt( ); Command c2AST = parseSingleCommand( ); c1AST = new SequentialCommand(c1AST, c2AST); } return c1AST; }

20 ASTs em Java – Exemplo: ParseIdentifier private Identifier parseIdentifier ( ) { Identifier idAST; if (currentToken.kind == Token.IDENTIFIER) { idAST = new Identifier(currentToken.spelling); currentToken = scanner.scan( ); } else report error return idAST; }

21 ASTs em Java – Exemplo: Parser public class Parser { private Token currentToken; … public Program parse ( ) { currentToken = scanner.scan( ); Program progAST = parseProgram( ); if (currentToken.kind != Token.EOT) report error return progAST; }

22 Scanning (Análise léxica) funciona de forma semelhante ao parser, mas em um maior nível de detalhe. Especificado usando expressões regulares/EBNF (Gramática léxica) Símbolos terminais são caracteres

23 Especificação do Scanner Token ::= Identifier | Integer-Literal | Operator | ; | : | := | ~ | ( | ) | eot Identifier ::= Letter | Identifier Letter | Identifier Digit Integer-Literal ::= Digit | Integer-Literal Digit Operator ::= + | - | * | / | | = | \ Separator ::= Comment | space | eol Comment ::= ! Graphic* eol

24 Especficação do Scanner (2) Token ::= Letter (Letter | Digit)* | Digit Digit* | + | - | * | / | | = | \ | ; | : | := | ~ | ( | ) | eot Separator ::= ! Graphic* eol | space | eol

25 Exemplo: Scanner private byte scanToken( ) { switch (currentChar) { case ‘a’: case ‘b’: … case ‘z’: takeIt( ); while (isLetter(currentChar) || isDigit(currentChar)) takeIt( ); return Token.IDENTIFIER; … case ‘\n’ : takeIt( ); return Token.EOL case ‘:’ : takeIt( ); if (currentChar == ‘=’) { takeIt(); return Token.BECOMES; } else return Token.COLON; …

26 Exemplo: Scanner (2) public class Scanner { private char currentChar = … private byte currentKind; private String currentSpelling; private void take (char expectedChar) {…} private void takeIt ( ) {…} private byte scanToken( ) {…} private void scanSeparator( ) {…}

27 Exemplo: Scanner (3) public class Scanner { … public Token scan ( ) { while (currentChar == ‘!’ || currentChar == ‘ ’ || currentChar == ‘\n’) scanSeparator( ); currentSpelling = new StringBuffer(“”); currentKind = scanToken( ); return new Token(currentKind, currentSpelling.toString); } }

28 Exemplo: Token public class Token { public byte kind; public String spelling; public Token (byte kind, String spelling) { this.kind = kind; this.spelling = spelling; if (kind == IDENTIFIER) verifica se é palavra reservada e muda o kind } }


Download ppt "Análise Sintática – Parte 2 Árvores Sintáticas Abstratas (ASTs) Scanning."

Similar presentations


Ads by Google