·

Engenharia de Computação ·

Compiladores

Send your question to AI and receive an answer instantly

Ask Question

Preview text

1 Compiladores Análise sintática BottomUp YACC 2 YACC Yet Another Compiler Compiler Produz um parser bottomup para uma dada gramática Usado para produzir compiladores para Pascal C C entre outras Além disso foi usado no desenvolvimento de bc calculadora eqn pic verificador de sintaxe SQL Lex bison Versão GNU 3 YACC Seqüência básica operacional aout Arquivo contendo gramática desejada no formato yacc programa programa yacc yacc programa fonte C criado pelo yacc Compilador Compilador CC Programa executável que faz a análise sintática da gramática descrita em parsey gramy ytabc yacc gcc cc 4 Exemplo 12 34 LEX LEX NUM PLUS NUM YACC YACC expr expr term term term term factor factor factor expr num id expr term expr term factor num factor num VVálido álido num 09 5 Formato do arquivo YACC Definições Regras Código Suplementar 6 Seções de Regras Normalmente escritas como segue expr expr term term term term factor factor factor expr ID NUM 7 Seção de Definições include stdioh include stdlibh token ID NUM start expr 8 Obs lexflex produz uma função yylex yacc produz uma função yyparse yyparse espera chamar uma yylex Como conseguir yylex Escrever sua própria Usar lexflex 9 int yylex ifits a num return NUM else ifits an id return ID else ifparsing is done return 0 else ifits an error return 1 Construindo yylex 10 lex yacc cc cc lexyyc lexyyc ytabc ytabc aout aout 11 Exemplo Suponha um arquivo lex scannerl e um arquivo yacc chamado decly Passo a serem feitos yacc d decly lex scannerl gcc c lexyyc ytabc gcc o parser lexyyo ytabo ll Nota scanner deve incluir na seção de definições include ytabh 12 YACC As regras podem ser recursivas As regras não podem ser ambíguas Usa um parser bottom up ShiftReduce LALR1 Solicita um token Empilha Redução Sim reduz usando a regras correspondente Não pega outro token Yacc não pode olhar mais que um token de lookahead yacc v gramy gera a tabela de estados em youtput Exemplo include stdioh include parsertabh id azAZazAZ09 wspc semi comma int return INT char return CHAR float return FLOAT comma return COMMA semi return SEMI id return ID wspc Exemplo include stdioh include stdlibh token CHAR COMMA FLOAT token ID INT SEMI decl type ID list printfSucesso list COMMA ID list SEMI type INT CHAR FLOAT parsery parsery cont extern FILE yyin main do yyparse whilefeofyyin yyerrorchar s Nada definido