TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Programação em LEX

Por:   •  26/11/2015  •  Trabalho acadêmico  •  334 Palavras (2 Páginas)  •  200 Visualizações

Página 1 de 2

/*Parser c++*/

%{

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int yylex();

int yyerror(const char *p) {printf("Error!\n");}

%}

//--valores de Simbolos semanticos-----------------------------------

%union {int ival; float fval; char sym; char *ssym;};

%token <ival> NUM_INT

%token <fval> NUM_FLOAT

%token <ssym> VAR STRING

%token <ssym> IF ELSE WHILE DO FOR SUB

%token <ival> RELOP EQ NE LT LE GT GE

%token <sym> OPA OPS OPM OPD LP RP STOP ATT LCH RCH LCOL RCOL APOSTROFO ASPAS VIRG

%type <ival> expr Num cond

%type <ssym> Vars

%start program

//--REGRAS GRAMATICAIS--------------------------------------------------

%%

program:

| program corpo

| program sub program

| sub program

;

sub: SUB VAR LCH {printf ("inicio def subprograma: %s\n", $2); } corpo RCH {printf("fim def subprograma: %s\n", $2); };

corpo:

| corpo expr

| corpo stmt

| corpo cmd

| expr

| stmt

| cmd

;

stmt:

| VAR ATT expr STOP {printf("atribuição: %s - %d\n", $1, $3);}

| VAR LP RP STOP {printf("chamada de função: %s\n", $1);}

| VAR LP vars RP STOP {printf("chamada de função com parametros: %s\n\t%s\n", $1, $3);}

| VAR vars VAR STOP {printf("chamada de função: %s\n\tparametros: %s\n", $1, $2);}

| VAR VAR STOP {printf("chamada de função: %s\n\tparametros: %s\n", $1, $2);}

| VAR STRING STOP {printf("chamada de função: %s\n", $1);}

| STOP

;

vars:

vars virg var {$$ - $1; strcat($$, ", ");strcat($$, $3);}

| vars VAR {$$ = $1; strcat($$, " ");strcat($$, $2);}

| VAR {$$ = $1;}

;

num:

NUM_INT

| NUM_FLOAT

;

...

Baixar como (para membros premium)  txt (2.6 Kb)   pdf (45.9 Kb)   docx (12.1 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com