Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Documentos relacionados
Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Compiladores - Especificando Sintaxe

Como construir um compilador utilizando ferramentas Java

Linguagens Livres de Contexto

Compilação da linguagem Panda

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Teoria e Implementação de Linguagens Computacionais. Especificação do projeto da disciplina (2006.1) Versão de 23/08/2006.

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

Análise Sintática. Fabiano Baldo

Compiladores - Análise Recursiva

V.2 Especificação Sintática de Linguagens de Programação

Linguagem de programação: Pascal

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Compiladores - Análise Recursiva

Linguagens de Programação Aula 4

Programação Introdução

Compiladores Prof. a Mariella Berger. Trabalho 2 Analisador Léxico

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Especificações Gerais do Compilador e Definição de FRANKIE

Compiladores - Análise Preditiva

Conceitos de Linguagens de Programação

Introdução à Ciência da Computação

Grupo 3: 8,3 - Parte Léxica (2,0): 1,9 - Na parte I especificou tamanho de identificador com 512 caracteres, mas não tratou (-0,1) -Parte Sintática

O AMBIENTE DE PROGRAMAÇÃO VISUAL -PLANO DE ENSINO. Prof. Angelo Augusto Frozza, M.Sc.

Python e sua sintaxe LNCC UFRJ

Conceitos de Linguagens de Programação

Compiladores - Análise Preditiva

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page:

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada

Análise Sintática Bottom-up

= = = = = = = = = = = = = = = =

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Compiladores - Gramáticas

Compiladores - Gramáticas

Analisadores Descendentes Tabulares; Cjs First Follow

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Linguagem Pascal. Definição e Tipos de Dados. Professora Lara Popov Zambiasi Bazzi Oberderder. Linguagem PASCAL 1

Análise Sintática II: Analisadores Descendentes Preditivos

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Análise Sintática - Final

Como construir um compilador utilizando ferramentas Java

Análise Semântica e Tratamento de Erros Dependentes de Contexto

Linguagens Formais e Autômatos

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

1 d=

Grupo 3: 8,5 (nota revisada) - Parte Léxica (2,0): 1,9 - Na parte I especificou tamanho de identificador com 512 caracteres, mas não tratou (-0,1)

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Análise Sintática Introdução

Linguagens de Domínio Específico

Tokens, Padroes e Lexemas

Análise Sintática Descendente

Aspectos do analisador sintático Usabilidade da Dias de atraso

Compiladores II. Fabio Mascarenhas

Conceitos de Linguagens de Programação

Compiladores - Análise Léxica

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Descrição da Linguagem DECAF

Compiladores 02 Analise léxica

Como construir um compilador utilizando ferramentas Java

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Introdução à Programação

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Linguagens de Domínio Específico

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Compiladores Análise Semântica

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal:

Linguagens de Programação

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Compiladores. Análise Sintática

Familiarização com a ferramenta JavaCC

Compiladores. Parser LL 10/13/2008

03. [Sebesta, 2000] Descreva a operação de um gerador de linguagem geral.

Análise Bottom-Up. Compiladores. Parsing LR. Tabela Ações/Transições. Análise LR. Construindo tabelas LR

Compiladores - Análise SLR

MAB Análise Sintática. Wednesday, April 4, 12

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Trabalho de Implementação de Analisador Léxico Parte 1

IV Gramáticas Livres de Contexto

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica

MAB Análise Sintática. Wednesday, August 31, 11

Compiladores - Análise Léxica

CP Compiladores I Prof. Msc. Carlos de Salles

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Disciplina Programação Prof. Esp. Armando Hage. Programação em Turbo Pascal

Compiladores Análise Semântica

Transcrição:

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up) 1

Notações BNF: já vista EBNF: existem pelo menos 3 estilos principais de BNF estendidas Derivada de expressões regulares Baseada na definição de Wirth Augmented Backus-Naur Form (ABNF), uma extensão do BNF documentada no RFC 2234 http://www.faqs.org/rfcs/rfc2234.html Para ser usada com o gerador de compiladores YACC YACC mais informal 2

EBNF derivada de ER? Significa um item opcional (as vezes aparece como opt + e * significam repita 1 ou mais vezes, ou 0 ou mais vezes 3

EBNF baseada em Wirth [ ] significa um item opcional { } significa repita 0 ou mais vezes 4

ABNF [ ] significa um item opcional * significa repetição, com números extra para indicar limites (e.g. * significa 0 ou mais, 1* significa 1 ou mais, 2*5 significa entre 2 e 5 vezes). 5

EBNF baseada em Wirth (Módula-2) http://cui.unige.ch/dbresearch/enseignement/analyseinfo/modula2/expression.html expression ::= simple_expression [ ( "=" "#" "<>" "<" "<=" ">" ">=" "IN" ) simple_expression ] simple_expression ::= [ "+" "-" ] term { ( "+" "-" "OR" ) term } term ::= factor { ( "*" "/" "DIV" "MOD" "AND" "&" ) factor } factor ::= number string set designator [ "(" [ expression { "," expression } ] ")" ] "(" expression ")" "NOT" factor 6

Notação EBNF BNF estendida Observem que, na gramática de Módula-2 como os não terminais não aparecem entre colchetes angulares os terminais precisam ser discriminados. Nesta gramática eles aparecem entre aspas. Podem também aparecer negritados. Notação propícia para implementar um tipo de analisador sintático chamado de DESCENDENTE RECURSIVO com procedimentos recursivos. Veremos ele na disciplina Introdução à Compilação. Nos analisadores descendentes (Top-Down, por exemplo o JavaCC) a gramática não pode ter recursão à esquerda. Mas como eliminá-la sem alterar a associação de operadores como + - * / que são associados à esquerda?? Fazemos uso de 3 operações: 7

1) Fatoração E -> T + E T => T (+E ) De uma forma geral, se: A -> 1 2... n com <> Podemos fatorá-la em: A -> ( 1 2... n ) 2) Substituição da notação recursiva pela iterativa quando houver recursão à esquerda. 8

E -> E + T T E => E + T => E + T + T =>* T + T + T +... + T Notação de Wirth usa { } para denotar a repetição de zero ou mais vezes. Portanto, E -> T {+T} 3) Combinação da Fatoração e Substituição da Recursão 9

E -> E + T E T T E -> E (+ T -T) T E -> T {+T -T} E -> T {(+ -) T} EBNF (Wirth) [ ] = { } = * Na gramática em EBNF não podemos ver as regras de associatividade (não há recursão à esquerda), MAS a associatividade de operadores é implementada diretamente no compilador segundo a tabela fornecida pela linguagem. 10

Exercício: passar para EBNF E ::= E + T E T + T - T T T ::= T * F T / F F F ::= a b ( E ) 11

Notação usada com o YACC (PASCAL) http://www.moorecad.com/standardpascal/pascal.y expression : simple_expression simple_expression relop simple_expression ; simple_expression : term simple_expression addop term ; term : factor term mulop factor ; factor : sign factor exponentiation ; exponentiation : primary primary STARSTAR exponentiation ; primary : variable_access unsigned_constant function_designator set_constructor LPAREN expression RPAREN NOT primary ; 12

Notação usada com o YACC (Yet Another Compiler Compiler) Analisador Bottom-up Os símbolos do VT aparecem logo no começo da notação em maiúsculas (tokens): %{ /* * grammar.y Pascal grammar in Yacc format, based originally on BNF given * in "Standard Pascal -- User Reference Manual", by Doug Cooper. * This in turn is the BNF given by the ANSI and ISO Pascal standards, and so, is PUBLIC DOMAIN. The grammar is for ISO Level 0 Pascal. */ %} %token AND ARRAY ASSIGNMENT CASE CHARACTER_STRING COLON COMMA CONST DIGSEQ %token DIV DO DOT DOTDOT DOWNTO ELSE END EQUAL EXTERNAL FOR FORWARD FUNCTION %token GE GOTO GT IDENTIFIER IF IN LABEL LBRAC LE LPAREN LT MINUS MOD NIL NOT %token NOTEQUAL OF OR OTHERWISE PACKED PBEGIN PFILE PLUS PROCEDURE PROGRAM RBRAC %token REALNUMBER RECORD REPEAT RPAREN SEMICOLON SET SLASH STAR STARSTAR THEN %token TO TYPE UNTIL UPARROW VAR WHILE WITH As regras da gramática terminam com um ; A recursão a esquerda é permitida, assim como a direita 13

Dêem as regras de: Prioridade Associatividade de cada operador do Pascal com a ajuda da gramática usada com o YACC. Como o parser usado no YACC é bottom-up podemos ter recursão a esquerda e a direita. Assim, fica muito fácil dizer a associatividade de um operador ao olhar para a gramática. 14

Prioridade e Associatividades dos operadores segundo esta gramática do PASCAL Associatividade + P R I O R I D A D E - Not ( ) ** Sinais * DIV / MOD AND + - OR > >= < <= <> = Dir-esq (not) Dir-esq (**) Dir-esq (sinais) Esq-dir (mulop) Esq-dir (adop) Não há com relop 15

Gramática de C# notação YACC-ish http://msdn.microsoft.com/library/default.asp?url=/library/enus/csspec/html/vclrfcsharpspec_c.asp conditional-expression: conditional-or-expression conditional-or-expression? expression : expression assignment: unary-expression assignment-operator expression assignment-operator: one of = += -= *= /= %= &= = ^= <<= >>= expression: conditional-expression assignment Observem como as regras alternativas aparecem em linhas diferentes Nenhuma meta-informação separa terminal de não terminal 16

Gramática de C# adaptada para BNF <expression>::= <conditional-expression> <assignment> <conditional-expression>::= <conditional-or-expression> <conditional-or-expression>? <expression> : <expression> <assignment>::= <unary-expression> <assignment-operator> <expression> <assignment-operator>::= = += -= *= /= %= &= = ^= <<= >>= Mais formal 17

Resumo sobre notações Em parsers top down devemos usar uma notação de gramática que não permita a recursão a esquerda, que é proibida EBNF Em parsers bottom-up podemos usar uma notação BNF e usar recursão a esquerda e direita. Usamos também a notação apropriada ao YACC quando pretendemos usar tal gerador de analisadores sintáticos. 18