From b040304beb71bd9840afa40bd84d3c90229464b2 Mon Sep 17 00:00:00 2001 From: viniciusmioto <vsmioto@gmail.com> Date: Tue, 3 Dec 2024 17:17:04 -0300 Subject: [PATCH] inicia avalia trabs --- ALTERADO/compilador.o | Bin 0 -> 1736 bytes ALTERADO/compilador.tab.c | 2465 +++++++++++++++++++++++++++++ ALTERADO/compilador.tab.h | 137 ++ ALTERADO/lex.yy.c | 2197 +++++++++++++++++++++++++ ALTERADO/stack/stack.o | Bin 0 -> 2056 bytes ALTERADO/ts/ts.o | Bin 0 -> 11248 bytes AvaliaTrabs/Exemplo7.02/pgma.pas | 2 +- AvaliaTrabs/Exemplo7.03/pgma.pas | 4 +- AvaliaTrabs/Exemplo7.04/pgma.pas | 8 +- AvaliaTrabs/Exemplo7.05/pgma.pas | 8 +- AvaliaTrabs/Exemplo8.05/pgma.pas | 4 +- AvaliaTrabs/Exemplo8.06/pgma.pas | 4 +- AvaliaTrabs/Exemplo8.07/pgma.pas | 6 +- AvaliaTrabs/Exemplo8.08/pgma.pas | 6 +- AvaliaTrabs/Exemplo8.09/pgma.pas | 4 +- AvaliaTrabs/Exemplo8.10/pgma.pas | 6 +- AvaliaTrabs/ExemploErro1/pgma.pas | 2 +- AvaliaTrabs/ExemploErro2/pgma.pas | 2 +- AvaliaTrabs/MEPA | 43 +- AvaliaTrabs/compilador | Bin 54640 -> 88872 bytes AvaliaTrabs/pgma.pas | 2 +- AvaliaTrabs/res | 69 + 22 files changed, 4936 insertions(+), 33 deletions(-) create mode 100644 ALTERADO/compilador.o create mode 100644 ALTERADO/compilador.tab.c create mode 100644 ALTERADO/compilador.tab.h create mode 100644 ALTERADO/lex.yy.c create mode 100644 ALTERADO/stack/stack.o create mode 100644 ALTERADO/ts/ts.o diff --git a/ALTERADO/compilador.o b/ALTERADO/compilador.o new file mode 100644 index 0000000000000000000000000000000000000000..1de430514a29f2c3cac0f71bd10f5c6e8454f918 GIT binary patch literal 1736 zcmX^A>+L@t1_nk31_;5zz`(%4#K6Fy01{zfkYr$B=m5(?_~_&csGJ5!4+8_k0w|xI zfq?;pLFR$<#K)JUR+NBP5F8&L;u;YGVIz||Q2ikDKt`TmW?+y9DPUn}08ua;AD^6` zo1349;JY}6IKp@ccW@wt7?_dRP;1~K@$t#UB}JKe=}-}L_rcs{0F@6xHjIIR0pwPw z6qo|LuOKnGB)&ASJTosPKHkR#ECD4Fpbl_=@;jIr!0tQ10yhiANFxRY1_@{!F);8m zFfj6ib%GRu#4oTgFo=Spjg5g}1p@;EHv<Dh09XYB11AFngPhC*WkaQirv5WCUi@3l zyz=j1hKUQB<$o+>mjA)Qz%YS>(cvctBg4lR?DM5O7#YkN85l$u7#JonFfdGHWMG(} z$iOg>fq`KPNG$^+!%vX>istwqFg-7zdO-3o_!)jOFgpBP!5shNB{RcB4TyTU887%9 z!15sT1Q-}Zz<RhLdR8^Z|A6V!Vr2NK!3wqup_dz>7vzS&)y^ybGc!&+z#M<=|6zuU zf2)~R{%wZ%4P-9JUm&-@*c^-wJ6|z#tOB_m<Th+}FfcR-f!yZn8sNxK&Y%DSs>NIk zs>N0cs>KRi46a2*`3iZ73OSj18Hoz2DGIs@AbI3SxC7z9vJHgCz`y_%hs7y|yapo! z11|%Et^y+ig8&1At_&js11kfAj|7Ca{lmb(AjrUw^8-T1eqdl=;9+3Mc>|$iPcSer z@G&sx9)Y9}pFIo^b9OK=Ft9K%_-ujDwsWBJQy{c$4^&?Vgzp2&q#*li7{KY-rvgIT zW<cc=AhazgGjK96_<+(sCj*164Ffn;>smnal8*_5wgu%kMg|5S9Z1@@1*LV6K2Rb9 z=>rv0j0_BHpnw9=3qkII<}HvIs0`v`W?+Ej-x(lzW(EdBsG3eF-x$iTg7R&k{A?)S z70RCk;xi%2mu3(j$$U@|$H&6J0L$N?@{=D)y)nq2P_sbplZEnO@yiGCCrAp6K}taw z%wb?)h(eS1K;tK&@x##g_7FZ3ECFeu@%<ruP#S_*8J}8_S;CMLuUA}B#1J1JUtE%s zT2xfP5T91S5TBV_P?VXQ3QE@u@x__BN%=YX4DsoyMTyS&DVgc{4Dm&&If==M`3&)C z`30$Y4DluT*&r$}hao;KEvK|N17uK9W?o4e)DArphMbbz0%I807|b<-agD%SLm1Z( J%r#(O007xl=tlqm literal 0 HcmV?d00001 diff --git a/ALTERADO/compilador.tab.c b/ALTERADO/compilador.tab.c new file mode 100644 index 0000000..98a160e --- /dev/null +++ b/ALTERADO/compilador.tab.c @@ -0,0 +1,2465 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.3" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + PROGRAM = 258, + ABRE_PARENTESES = 259, + FECHA_PARENTESES = 260, + VIRGULA = 261, + PONTO_E_VIRGULA = 262, + DOIS_PONTOS = 263, + PONTO = 264, + T_BEGIN = 265, + T_END = 266, + VAR = 267, + IDENT = 268, + ATRIBUICAO = 269, + LABEL = 270, + TYPE = 271, + ARRAY = 272, + PROCEDURE = 273, + FUNCTION = 274, + GOTO = 275, + IF = 276, + THEN = 277, + ELSE = 278, + WHILE = 279, + DO = 280, + OR = 281, + DIV = 282, + AND = 283, + NOT = 284, + IGUAL = 285, + DIFERENTE = 286, + MENOR_IGUAL = 287, + MAIOR_IGUAL = 288, + MENOR = 289, + MAIOR = 290, + MAIS = 291, + MENOS = 292, + ASTERISCO = 293, + NUMERO = 294, + READ = 295, + WRITE = 296, + LOWER_THAN_ELSE = 297 + }; +#endif +/* Tokens. */ +#define PROGRAM 258 +#define ABRE_PARENTESES 259 +#define FECHA_PARENTESES 260 +#define VIRGULA 261 +#define PONTO_E_VIRGULA 262 +#define DOIS_PONTOS 263 +#define PONTO 264 +#define T_BEGIN 265 +#define T_END 266 +#define VAR 267 +#define IDENT 268 +#define ATRIBUICAO 269 +#define LABEL 270 +#define TYPE 271 +#define ARRAY 272 +#define PROCEDURE 273 +#define FUNCTION 274 +#define GOTO 275 +#define IF 276 +#define THEN 277 +#define ELSE 278 +#define WHILE 279 +#define DO 280 +#define OR 281 +#define DIV 282 +#define AND 283 +#define NOT 284 +#define IGUAL 285 +#define DIFERENTE 286 +#define MENOR_IGUAL 287 +#define MAIOR_IGUAL 288 +#define MENOR 289 +#define MAIOR 290 +#define MAIS 291 +#define MENOS 292 +#define ASTERISCO 293 +#define NUMERO 294 +#define READ 295 +#define WRITE 296 +#define LOWER_THAN_ELSE 297 + + + + +/* Copy the first part of user declarations. */ +#line 6 "compilador.y" + +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <string.h> +#include "compilador.h" +#include "ts/ts.h" +#include "stack/stack.h" + +int num_vars; +int num_param; +ts_t *ts; +int nivel_lexico; +int desloc; +int destino_nivel; +int destino_desloc; +simb_t *l_elem; +int rot_id; +custom_stack_t *rot; +custom_stack_t *proc; + +int val_ou_ref; +int atr_indireto; + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 216 of yacc.c. */ +#line 216 "compilador.tab.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; +#endif +{ + return i; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 3 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 140 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 43 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 67 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 104 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 176 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 297 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 4, 14, 15, 16, 23, 26, 27, + 29, 30, 34, 35, 38, 40, 41, 42, 49, 51, + 55, 57, 61, 63, 66, 68, 69, 70, 71, 80, + 81, 82, 83, 95, 96, 97, 103, 104, 106, 110, + 111, 117, 118, 123, 127, 129, 131, 135, 139, 142, + 143, 147, 149, 151, 153, 155, 157, 159, 161, 162, + 166, 168, 170, 171, 175, 176, 179, 183, 184, 185, + 190, 191, 194, 199, 203, 205, 207, 212, 216, 218, + 222, 226, 230, 234, 238, 242, 244, 248, 252, 254, + 258, 262, 264, 265, 269, 271, 275, 277, 278, 279, + 286, 289, 292, 293, 294 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 44, 0, -1, -1, 45, 3, 13, 4, 59, 5, + 7, 46, 9, -1, -1, -1, 49, 50, 47, 60, + 48, 77, -1, 15, 6, -1, -1, 51, -1, -1, + 52, 12, 53, -1, -1, 53, 54, -1, 54, -1, + -1, -1, 55, 58, 8, 57, 56, 7, -1, 13, + -1, 58, 6, 13, -1, 13, -1, 59, 6, 13, + -1, 13, -1, 60, 61, -1, 64, -1, -1, -1, + -1, 18, 13, 62, 68, 7, 46, 63, 7, -1, + -1, -1, -1, 19, 13, 65, 68, 8, 66, 57, + 7, 46, 67, 7, -1, -1, -1, 4, 69, 71, + 70, 5, -1, -1, 72, -1, 71, 7, 72, -1, + -1, 12, 73, 75, 8, 57, -1, -1, 74, 75, + 8, 57, -1, 76, 6, 75, -1, 76, -1, 13, + -1, 10, 78, 11, -1, 79, 7, 78, -1, 79, + 7, -1, -1, 102, 8, 80, -1, 80, -1, 81, + -1, 77, -1, 106, -1, 103, -1, 92, -1, 95, + -1, -1, 13, 82, 83, -1, 84, -1, 86, -1, + -1, 85, 14, 98, -1, -1, 87, 88, -1, 4, + 89, 5, -1, -1, -1, 89, 6, 90, 98, -1, + -1, 91, 98, -1, 40, 4, 93, 5, -1, 93, + 6, 94, -1, 94, -1, 13, -1, 41, 4, 96, + 5, -1, 96, 6, 98, -1, 98, -1, 97, 30, + 98, -1, 97, 31, 98, -1, 97, 34, 98, -1, + 97, 32, 98, -1, 97, 35, 98, -1, 97, 33, + 98, -1, 98, -1, 98, 36, 99, -1, 98, 37, + 99, -1, 99, -1, 99, 38, 100, -1, 99, 27, + 100, -1, 100, -1, -1, 13, 101, 86, -1, 39, + -1, 4, 97, 5, -1, 39, -1, -1, -1, 104, + 24, 97, 25, 105, 80, -1, 108, 107, -1, 23, + 80, -1, -1, -1, 21, 97, 109, 22, 80, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 47, 47, 47, 63, 74, 60, 93, 94, 97, + 101, 101, 102, 105, 106, 110, 113, 110, 121, 134, + 143, 154, 155, 159, 161, 162, 167, 191, 167, 205, + 229, 233, 205, 246, 247, 245, 255, 258, 259, 263, + 262, 272, 272, 280, 281, 284, 294, 297, 298, 299, + 302, 303, 306, 307, 308, 309, 310, 311, 314, 314, + 318, 319, 322, 322, 353, 353, 395, 398, 402, 401, + 414, 414, 428, 431, 432, 435, 444, 447, 450, 455, + 458, 461, 464, 467, 470, 473, 476, 482, 488, 491, + 494, 497, 500, 500, 542, 552, 555, 557, 564, 557, + 590, 597, 599, 602, 602 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "PROGRAM", "ABRE_PARENTESES", + "FECHA_PARENTESES", "VIRGULA", "PONTO_E_VIRGULA", "DOIS_PONTOS", "PONTO", + "T_BEGIN", "T_END", "VAR", "IDENT", "ATRIBUICAO", "LABEL", "TYPE", + "ARRAY", "PROCEDURE", "FUNCTION", "GOTO", "IF", "THEN", "ELSE", "WHILE", + "DO", "OR", "DIV", "AND", "NOT", "IGUAL", "DIFERENTE", "MENOR_IGUAL", + "MAIOR_IGUAL", "MENOR", "MAIOR", "MAIS", "MENOS", "ASTERISCO", "NUMERO", + "READ", "WRITE", "LOWER_THAN_ELSE", "$accept", "programa", "@1", "bloco", + "@2", "@3", "parte_declara_rotulos", "parte_declara_vars", "var", "@4", + "declara_vars", "declara_var", "@5", "@6", "tipo", "lista_id_var", + "lista_idents", "parte_declara_subrotinas", "declaracao_procedimento", + "@7", "@8", "declaracao_funcao", "@9", "@10", "@11", + "parametros_ou_nada", "@12", "@13", "paramentros_formais", "secao_pfs", + "@14", "@15", "lista_id_pf", "parametro", "comando_composto", "comandos", + "comando", "comando_sem_rotulo", "atribuicao_ou_procedimento", "@16", + "atribuicao_ou_procedimento_token", "atribuicao", "@17", + "chamada_procedimento", "@18", "lista_parametros", + "lista_parametros_parenteses", "@19", "@20", "leitura", "lista_leituras", + "simb_leitura", "escrita", "lista_escritas", "expressao", + "expressao_simples", "termo", "fator", "@21", "numero", + "comando_repetitivo", "@22", "@23", "comando_condicional", "cond_else", + "if_then", "@24", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 43, 45, 44, 47, 48, 46, 49, 49, 50, + 52, 51, 51, 53, 53, 55, 56, 54, 57, 58, + 58, 59, 59, 60, 60, 60, 62, 63, 61, 65, + 66, 67, 64, 69, 70, 68, 68, 71, 71, 73, + 72, 74, 72, 75, 75, 76, 77, 78, 78, 78, + 79, 79, 80, 80, 80, 80, 80, 80, 82, 81, + 83, 83, 85, 84, 87, 86, 88, 88, 90, 89, + 91, 89, 92, 93, 93, 94, 95, 96, 96, 97, + 97, 97, 97, 97, 97, 97, 98, 98, 98, 99, + 99, 99, 101, 100, 100, 100, 102, 104, 105, 103, + 106, 107, 107, 109, 108 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 9, 0, 0, 6, 2, 0, 1, + 0, 3, 0, 2, 1, 0, 0, 6, 1, 3, + 1, 3, 1, 2, 1, 0, 0, 0, 8, 0, + 0, 0, 11, 0, 0, 5, 0, 1, 3, 0, + 5, 0, 4, 3, 1, 1, 3, 3, 2, 0, + 3, 1, 1, 1, 1, 1, 1, 1, 0, 3, + 1, 1, 0, 3, 0, 2, 3, 0, 0, 4, + 0, 2, 4, 3, 1, 1, 4, 3, 1, 3, + 3, 3, 3, 3, 3, 1, 3, 3, 1, 3, + 3, 1, 0, 3, 1, 3, 1, 0, 0, 6, + 2, 2, 0, 0, 5 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 0, 0, 1, 0, 0, 0, 22, 0, 0, + 0, 8, 21, 0, 0, 12, 7, 3, 4, 9, + 0, 25, 15, 0, 5, 24, 11, 14, 0, 29, + 0, 0, 23, 13, 20, 0, 36, 26, 49, 6, + 0, 0, 33, 0, 36, 58, 0, 96, 0, 0, + 53, 0, 0, 51, 52, 56, 57, 0, 55, 0, + 54, 102, 19, 18, 16, 41, 30, 0, 64, 0, + 92, 94, 103, 85, 88, 91, 0, 0, 46, 48, + 97, 0, 97, 100, 0, 39, 34, 37, 0, 0, + 8, 59, 60, 0, 61, 67, 0, 64, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, + 0, 74, 0, 78, 47, 50, 0, 101, 17, 0, + 41, 0, 45, 0, 44, 0, 27, 0, 70, 65, + 95, 93, 79, 80, 82, 84, 81, 83, 97, 86, + 87, 90, 89, 72, 0, 76, 0, 98, 0, 38, + 35, 0, 0, 8, 0, 63, 0, 0, 104, 73, + 77, 97, 0, 42, 43, 31, 28, 66, 68, 71, + 99, 40, 0, 0, 32, 69 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 1, 2, 14, 21, 31, 15, 18, 19, 20, + 26, 27, 28, 84, 64, 35, 8, 24, 32, 44, + 154, 25, 36, 89, 172, 43, 65, 121, 86, 87, + 119, 88, 123, 124, 50, 51, 52, 53, 54, 68, + 91, 92, 93, 94, 95, 129, 156, 173, 157, 55, + 110, 111, 56, 112, 72, 73, 74, 75, 97, 57, + 58, 59, 161, 60, 83, 61, 104 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -114 +static const yytype_int8 yypact[] = +{ + -114, 15, 14, -114, 16, 32, 28, -114, 7, 55, + 50, 51, -114, 62, 56, 58, -114, -114, -114, -114, + 60, 52, -114, 61, 63, -114, 64, -114, 66, -114, + 82, 87, -114, -114, -114, 3, 69, -114, 6, -114, + 85, 86, -114, 68, 69, -114, 1, -114, 96, 97, + -114, 91, 98, -114, -114, -114, -114, 95, -114, 80, + -114, 83, -114, -114, -114, 99, -114, 100, 94, 1, + -114, -114, 59, -4, 4, -114, 101, 1, -114, 6, + -3, 1, -3, -114, 102, -114, 103, -114, 104, 86, + 51, -114, -114, 105, -114, 108, 23, -114, 1, 1, + 1, 1, 1, 1, 93, 1, 1, 1, 1, -114, + 29, -114, 38, -4, -114, -114, 53, -114, -114, 104, + 99, 111, -114, 110, 107, 113, -114, 1, -114, -114, + -114, -114, -4, -4, -4, -4, -4, -4, -3, 4, + 4, -114, -114, -114, 101, -114, 1, -114, 114, -114, + -114, 86, 104, 51, 116, -4, 43, 1, -114, -114, + -4, -3, 86, -114, -114, -114, -114, -114, -114, -4, + -114, -114, 117, 1, -114, -4 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -114, -114, -114, -86, -114, -114, -114, -114, -114, -114, + -114, 106, -114, -114, -87, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, 77, -114, -114, -114, 5, + -114, -114, -113, -114, 109, 47, -114, -79, -114, -114, + -114, -114, -114, 30, -114, -114, -114, -114, -114, -114, + -114, -16, -114, -114, -61, -77, -54, -47, -114, -114, + -114, -114, -114, -114, -114, -114, -114 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -98 +static const yytype_int16 yytable[] = +{ + 113, 115, 125, 117, 126, 69, 148, 38, 96, 40, + 45, 41, 9, 10, 70, 3, 38, 4, 46, 45, + 116, 132, 133, 134, 135, 136, 137, 46, 130, 5, + -97, 107, 105, 106, 143, 144, 6, 48, 49, 164, + 71, 7, 108, 145, 146, 47, 48, 49, 167, 168, + 155, 139, 140, 98, 99, 100, 101, 102, 103, 158, + 141, 142, 11, 12, 163, 17, 13, 165, 16, 160, + -10, 23, 22, 42, 29, 171, 66, -15, 147, 34, + 169, 30, 170, 98, 99, 100, 101, 102, 103, 98, + 99, 100, 101, 102, 103, 37, 175, 38, 62, 63, + 76, 77, 78, 80, 81, 79, 82, 90, -62, 118, + 120, 85, 128, 152, 109, 138, 150, 122, 151, 127, + 153, 67, 162, 166, 174, 149, 114, 131, 159, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 39 +}; + +static const yytype_int16 yycheck[] = +{ + 77, 80, 89, 82, 90, 4, 119, 10, 69, 6, + 13, 8, 5, 6, 13, 0, 10, 3, 21, 13, + 81, 98, 99, 100, 101, 102, 103, 21, 5, 13, + 24, 27, 36, 37, 5, 6, 4, 40, 41, 152, + 39, 13, 38, 5, 6, 39, 40, 41, 5, 6, + 127, 105, 106, 30, 31, 32, 33, 34, 35, 138, + 107, 108, 7, 13, 151, 9, 15, 153, 6, 146, + 12, 19, 12, 4, 13, 162, 8, 13, 25, 13, + 157, 18, 161, 30, 31, 32, 33, 34, 35, 30, + 31, 32, 33, 34, 35, 13, 173, 10, 13, 13, + 4, 4, 11, 8, 24, 7, 23, 7, 14, 7, + 7, 12, 4, 6, 13, 22, 5, 13, 8, 14, + 7, 44, 8, 7, 7, 120, 79, 97, 144, -1, + -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, + 31 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 44, 45, 0, 3, 13, 4, 13, 59, 5, + 6, 7, 13, 15, 46, 49, 6, 9, 50, 51, + 52, 47, 12, 19, 60, 64, 53, 54, 55, 13, + 18, 48, 61, 54, 13, 58, 65, 13, 10, 77, + 6, 8, 4, 68, 62, 13, 21, 39, 40, 41, + 77, 78, 79, 80, 81, 92, 95, 102, 103, 104, + 106, 108, 13, 13, 57, 69, 8, 68, 82, 4, + 13, 39, 97, 98, 99, 100, 4, 4, 11, 7, + 8, 24, 23, 107, 56, 12, 71, 72, 74, 66, + 7, 83, 84, 85, 86, 87, 97, 101, 30, 31, + 32, 33, 34, 35, 109, 36, 37, 27, 38, 13, + 93, 94, 96, 98, 78, 80, 97, 80, 7, 73, + 7, 70, 13, 75, 76, 57, 46, 14, 4, 88, + 5, 86, 98, 98, 98, 98, 98, 98, 22, 99, + 99, 100, 100, 5, 6, 5, 6, 25, 75, 72, + 5, 8, 6, 7, 63, 98, 89, 91, 80, 94, + 98, 105, 8, 57, 75, 46, 7, 5, 6, 98, + 80, 57, 67, 90, 7, 98 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (YYLEX_PARAM) +#else +# define YYLEX yylex () +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else +static void +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule) +#else +static void +yy_reduce_print (yyvsp, yyrule) + YYSTYPE *yyvsp; + int yyrule; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + ); + fprintf (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yymsg, yytype, yyvaluep) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + YYUSE (yyvaluep); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + +/* The look-ahead symbol. */ +int yychar; + +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void) +#else +int +yyparse () + +#endif +#endif +{ + + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + look-ahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to look-ahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a look-ahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the look-ahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 47 "compilador.y" + { + geraCodigo (NULL, "INPP"); + ;} + break; + + case 3: +#line 53 "compilador.y" + { + geraCodigo (NULL, "PARA"); + ;} + break; + + case 4: +#line 63 "compilador.y" + { + char r_main[4]; + sprintf(r_main, "R%02d", rot_id); + empilha(r_main, rot); + rot_id += 1; + char buffer[50]; + strcpy(buffer,"DSVS "); + strcat(buffer,r_main); + geraCodigo(NULL,buffer); + ;} + break; + + case 5: +#line 74 "compilador.y" + { + char r_main[4]; + desempilha(r_main,rot); + geraCodigo(r_main,"NADA"); + ;} + break; + + case 6: +#line 80 "compilador.y" + { + char buffer[50]; + sprintf(buffer,"DMEM %d",desloc); + desloc = retira_pr_fun(ts); + desloc = retira_vs_pf(ts); + geraCodigo(NULL,buffer); + if (nivel_lexico > 0) + nivel_lexico -= 1; + mostra_ts(ts); + ;} + break; + + case 10: +#line 101 "compilador.y" + { ;} + break; + + case 15: +#line 110 "compilador.y" + { num_vars = 0; ;} + break; + + case 16: +#line 113 "compilador.y" + { + char buffer[50]; + sprintf(buffer, "AMEM %d", num_vars); + geraCodigo(NULL, buffer); + ;} + break; + + case 18: +#line 122 "compilador.y" + { + if (strcmp(token, "integer") == 0) { + atualiza_tipo(num_vars, INTEIRO, ts); + } else if (strcmp(token, "boolean") == 0) { + atualiza_tipo(num_vars, BOOLEAN, ts); + } else { + yyerror("ERRO: Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos."); + } + mostra_ts(ts); // Mostra a tabela após a inserção + ;} + break; + + case 19: +#line 135 "compilador.y" + { /* insere �ltima vars na tabela de s�mbolos */ + num_vars += 1; + info_t info; + info.vs.tipo = NSEI; + info.vs.desloc = desloc; + insere_ts(token,VS,nivel_lexico,info,ts); + desloc += 1; + ;} + break; + + case 20: +#line 143 "compilador.y" + { + num_vars += 1; + info_t info; + info.vs.tipo = NSEI; + info.vs.desloc = desloc; + insere_ts(token,VS,nivel_lexico,info,ts); + desloc += 1; + /* insere vars na tabela de s�mbolos */ + ;} + break; + + case 26: +#line 167 "compilador.y" + { + // Insere o procedimento na tabela de símbolos + info_t info; + char r_proc[4]; + sprintf(r_proc, "R%02d", rot_id); + rot_id += 1; + strcpy(info.pr.rot,r_proc); + info.pr.quant = 0; + info.pr.param = NULL; + + // Incrementa o nível léxico + nivel_lexico += 1; + desloc = 0; // Reinicia deslocamento para variáveis locais do novo nível + + insere_ts(token, PR, nivel_lexico, info, ts); + empilha(token,proc); + + char buffer[50]; + sprintf(buffer,"ENPR %d",nivel_lexico); + geraCodigo(r_proc,buffer); + mostra_ts(ts); + ;} + break; + + case 27: +#line 191 "compilador.y" + { + char buffer[50]; + desempilha(buffer,proc); + l_elem = busca(buffer,ts); + sprintf(buffer,"RTPR %d, %d",l_elem->nivel,l_elem->info.pr.quant); + geraCodigo(NULL,buffer); + desloc = retira_vs_pf(ts); + mostra_ts(ts); + ;} + break; + + case 29: +#line 205 "compilador.y" + { + // Insere o funcao na tabela de símbolos + info_t info; + char r_func[4]; + sprintf(r_func, "R%02d", rot_id); + rot_id += 1; + strcpy(info.fun.rot,r_func); + info.fun.quant = 0; + info.fun.param = NULL; + info.fun.tipo = NSEI; + + // Incrementa o nível léxico + nivel_lexico += 1; + desloc = 0; // Reinicia deslocamento para variáveis locais do novo nível + + insere_ts(token, FUN, nivel_lexico, info, ts); + empilha(token,proc); + + char buffer[50]; + sprintf(buffer,"ENPR %d",nivel_lexico); + geraCodigo(r_func,buffer); + mostra_ts(ts); + ;} + break; + + case 30: +#line 229 "compilador.y" + { + num_vars = 1; + ;} + break; + + case 31: +#line 233 "compilador.y" + { + char buffer[50]; + desempilha(buffer,proc); + l_elem = busca(buffer,ts); + sprintf(buffer,"RTPR %d, %d",l_elem->nivel,l_elem->info.fun.quant); + geraCodigo(NULL,buffer); + desloc = retira_vs_pf(ts); + mostra_ts(ts); + ;} + break; + + case 33: +#line 246 "compilador.y" + {num_param = 0;;} + break; + + case 34: +#line 247 "compilador.y" + { + char proc_ident[50]; + desempilha(proc_ident,proc); + adiciona_param(proc_ident,num_param,ts); + empilha(proc_ident,proc); + mostra_ts(ts); + ;} + break; + + case 39: +#line 263 "compilador.y" + { + num_vars = 0; + val_ou_ref = REF; + ;} + break; + + case 40: +#line 268 "compilador.y" + { + num_param += num_vars; + val_ou_ref = VLR; + ;} + break; + + case 41: +#line 272 "compilador.y" + { + num_vars = 0; + val_ou_ref = VLR; + ;} + break; + + case 42: +#line 277 "compilador.y" + {num_param += num_vars;;} + break; + + case 45: +#line 284 "compilador.y" + { + num_vars += 1; + info_t info; + info.pf.tipo = NSEI; + info.pf.desloc = NSEI; + info.pf.passagem = val_ou_ref; + insere_ts(token,PF,nivel_lexico,info,ts); + ;} + break; + + case 58: +#line 314 "compilador.y" + {l_elem = busca(token, ts);;} + break; + + case 62: +#line 322 "compilador.y" + { + if (l_elem == NULL) { + yyerror("ERRO: Variável de destino não declarada"); + } else { + if (l_elem->categ == PF && l_elem->info.pf.passagem == REF) + atr_indireto = REF; + else atr_indireto = VLR; + destino_nivel = l_elem->nivel; + if(l_elem->categ == VS) + destino_desloc = l_elem->info.vs.desloc; + else if(l_elem->categ == PF) + destino_desloc = l_elem->info.pf.desloc; + else if(l_elem->categ == FUN) + destino_desloc = l_elem->info.fun.desloc; + else + yyerror("ERRO: Tentativa de atribuir em procedimento"); + + } +;} + break; + + case 63: +#line 340 "compilador.y" + { + // Gera código ARMZ para armazenar valor + char buffer[50]; + if (atr_indireto == REF) { + sprintf(buffer, "ARMI %d, %d", destino_nivel, destino_desloc); + } else { + sprintf(buffer, "ARMZ %d, %d", destino_nivel, destino_desloc); + } + geraCodigo(NULL, buffer); +;} + break; + + case 64: +#line 353 "compilador.y" + { + if (l_elem == NULL){ + yyerror("ERRO: Procedimento não declarado"); + } else{ + // Gera código para chamar o procedimento + empilha(l_elem->ident, proc); + } + if (l_elem->categ == FUN) + geraCodigo(NULL, "AMEM 1"); + if (l_elem->categ == PR || l_elem->categ == FUN) + num_param = 0; // Reinicia a contagem de parâmetros reais + ;} + break; + + case 65: +#line 368 "compilador.y" + { + char buffer[50]; + mostra_ts(ts); + desempilha(buffer, proc); + l_elem = busca(buffer, ts); + + if (l_elem->categ == PR || l_elem->categ ==FUN) { + // Verifica se o número de parâmetros reais bate com os formais + char error_msg[100]; + if (l_elem->categ == PR && num_param != l_elem->info.pr.quant) { + sprintf(error_msg, "ERRO: número de parâmetros incorreto. Esperado: %d, recebido: %d.", + l_elem->info.pr.quant, num_param); + yyerror(error_msg); + } else if(l_elem->categ == FUN && num_param != l_elem->info.fun.quant){ + sprintf(error_msg, "ERRO: número de parâmetros incorreto. Esperado: %d, recebido: %d.", + l_elem->info.fun.quant, num_param); + yyerror(error_msg); + } + + // Gera o código de chamada do procedimento + + sprintf(buffer, "CHPR %s, %d", l_elem->info.pr.rot, nivel_lexico); + geraCodigo(NULL, buffer); + } + ;} + break; + + case 68: +#line 402 "compilador.y" + { + char buffer[50]; + desempilha(buffer,proc); + l_elem = busca(buffer,ts); + val_ou_ref = l_elem->info.pr.param[num_param][1]; + empilha(buffer,proc); + ;} + break; + + case 69: +#line 410 "compilador.y" + { + num_param++; // Incrementa para cada parâmetro real + val_ou_ref = VLR; + ;} + break; + + case 70: +#line 414 "compilador.y" + { + char buffer[50]; + desempilha(buffer,proc); + l_elem = busca(buffer,ts); + val_ou_ref = l_elem->info.pr.param[num_param][1]; + empilha(buffer,proc); + ;} + break; + + case 71: +#line 422 "compilador.y" + { + num_param++; // Conta o primeiro parâmetro real + val_ou_ref = VLR; + ;} + break; + + case 75: +#line 435 "compilador.y" + { + geraCodigo(NULL, "LEIT"); + l_elem = busca(token,ts); + char buffer[50]; + sprintf(buffer,"ARMZ %d, %d",l_elem->nivel,l_elem->info.vs.desloc); + geraCodigo(NULL,buffer); + ;} + break; + + case 77: +#line 447 "compilador.y" + { + geraCodigo(NULL,"IMPR"); + ;} + break; + + case 78: +#line 450 "compilador.y" + { + geraCodigo(NULL,"IMPR"); + ;} + break; + + case 79: +#line 455 "compilador.y" + { + geraCodigo(NULL, "CMIG"); // Adiciona operação de cmig + ;} + break; + + case 80: +#line 458 "compilador.y" + { + geraCodigo(NULL, "CMDG"); // Adiciona operação de cmdg + ;} + break; + + case 81: +#line 461 "compilador.y" + { + geraCodigo(NULL, "CMME"); // Adiciona operação de cmme + ;} + break; + + case 82: +#line 464 "compilador.y" + { + geraCodigo(NULL, "CMEG"); // Adiciona operação de cmeg + ;} + break; + + case 83: +#line 467 "compilador.y" + { + geraCodigo(NULL, "CMMA"); // Adiciona operação de cmma + ;} + break; + + case 84: +#line 470 "compilador.y" + { + geraCodigo(NULL, "CMAG"); // Adiciona operação de cmag + ;} + break; + + case 86: +#line 476 "compilador.y" + { + if (val_ou_ref == REF) + yyerror("ERRO: tentativa de EXPRESSAO em passagem por REFERENCIA\n"); + else + geraCodigo(NULL, "SOMA"); // Adiciona operação de soma + ;} + break; + + case 87: +#line 482 "compilador.y" + { + if (val_ou_ref == REF) + yyerror("ERRO: tentativa de EXPRESSAO em passagem por REFERENCIA\n"); + else + geraCodigo(NULL, "SUBT"); // Adiciona operação de subt + ;} + break; + + case 89: +#line 491 "compilador.y" + { + geraCodigo(NULL, "MULT"); // Adiciona operação de mult + ;} + break; + + case 90: +#line 494 "compilador.y" + { + geraCodigo(NULL, "DIVI"); // Adiciona operação de divi + ;} + break; + + case 92: +#line 500 "compilador.y" + { + // Carrega variável + l_elem = busca(token, ts); + empilha(token, proc); + ;} + break; + + case 93: +#line 506 "compilador.y" + { + char buffer[50]; + desempilha(buffer, proc); + l_elem = busca(buffer, ts); + if (l_elem == NULL) { + yyerror("ERRO: Variável não declarada"); + } else { + if (val_ou_ref == REF) { + if (l_elem->categ == VS){ + sprintf(buffer, "CREN %d, %d", l_elem->nivel, l_elem->info.vs.desloc); + geraCodigo(NULL, buffer); + } + else if (l_elem->categ == PF){ + sprintf(buffer, "CREN %d, %d", l_elem->nivel, l_elem->info.pf.desloc); + geraCodigo(NULL, buffer); + } + else + yyerror("ERRO: Tentativa de passagem de referencia de procedimento ou funcao"); + + } + else if (l_elem->categ == PF && l_elem->info.pf.passagem == REF) { + sprintf(buffer, "CRVI %d, %d", l_elem->nivel, l_elem->info.pf.desloc); + geraCodigo(NULL, buffer); + } + else { + if (l_elem->categ == VS) { + sprintf(buffer, "CRVL %d, %d", l_elem->nivel, l_elem->info.vs.desloc); + geraCodigo(NULL, buffer); + } + else if (l_elem->categ == PF){ + sprintf(buffer, "CRVL %d, %d", l_elem->nivel, l_elem->info.pf.desloc); + geraCodigo(NULL, buffer); + } + } + } + ;} + break; + + case 94: +#line 542 "compilador.y" + { + // Empilha constante + char buffer[50]; + if (val_ou_ref == VLR) + sprintf(buffer, "CRCT %s", token); + else { + yyerror("ERRO: passagem de constante por REFERENCIA.\n"); + } + geraCodigo(NULL, buffer); +;} + break; + + case 97: +#line 557 "compilador.y" + { + char r_ini[4]; + sprintf(r_ini, "R%02d", rot_id); + empilha(r_ini, rot); + rot_id += 1; + geraCodigo(r_ini,"NADA"); + ;} + break; + + case 98: +#line 564 "compilador.y" + { + char r_fim[4]; + sprintf(r_fim, "R%02d", rot_id); + empilha(r_fim, rot); + rot_id += 1; + char buffer[50]; + strcpy(buffer, "DSVF "); + strcat(buffer,r_fim); + geraCodigo(NULL,buffer); + ;} + break; + + case 99: +#line 574 "compilador.y" + { + char r_ini[4]; + char r_fim[4]; + + desempilha(r_fim,rot); + desempilha(r_ini,rot); + + char buffer[50]; + strcpy(buffer,"DSVS "); + strcat(buffer,r_ini); + geraCodigo(NULL,buffer); + + geraCodigo(r_fim,"NADA"); + ;} + break; + + case 100: +#line 590 "compilador.y" + { + char r_fim[4]; + desempilha(r_fim,rot); + geraCodigo(r_fim,"NADA"); + ;} + break; + + case 103: +#line 602 "compilador.y" + { + char r_else[4]; + sprintf(r_else,"R%02d",rot_id); + empilha(r_else,rot); + rot_id += 1; + char buffer[50]; + strcpy(buffer, "DSVF "); + strcat(buffer,r_else); + geraCodigo(NULL,buffer); + + char r_fim[4]; + sprintf(r_fim, "R%02d", rot_id); + empilha(r_fim, rot); + rot_id += 1; + ;} + break; + + case 104: +#line 617 "compilador.y" + { + char r_fim[4]; + desempilha(r_fim,rot); + char r_else[4]; + desempilha(r_else,rot); + + empilha(r_fim,rot); + char buffer[50]; + strcpy(buffer, "DSVS "); + strcat(buffer,r_fim); + geraCodigo(NULL,buffer); + + geraCodigo(r_else,"NADA"); + ;} + break; + + +/* Line 1267 of yacc.c. */ +#line 2212 "compilador.tab.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (yymsg); + } + else + { + yyerror (YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse look-ahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + +#line 634 "compilador.y" + + +int main (int argc, char** argv) { + FILE* fp; + extern FILE* yyin; + + if (argc<2 || argc>2) { + printf("usage compilador <arq>a %d\n", argc); + return(-1); + } + + fp=fopen (argv[1], "r"); + if (fp == NULL) { + printf("usage compilador <arq>b\n"); + return(-1); + } + + +/* ------------------------------------------------------------------- + * Inicia a Tabela de S�mbolos + * ------------------------------------------------------------------- */ + ts = (ts_t *)malloc(sizeof(ts_t)); + inicializa_ts(ts); + nivel_lexico = 0; + desloc = 0; + + // Inicializa Rotulos + rot = (custom_stack_t *)malloc(sizeof(custom_stack_t)); + inicializa_stack(rot); + rot_id = 0; + + proc = (custom_stack_t *)malloc(sizeof(custom_stack_t)); + inicializa_stack(proc); + + yyin=fp; + yyparse(); + + return 0; +} + diff --git a/ALTERADO/compilador.tab.h b/ALTERADO/compilador.tab.h new file mode 100644 index 0000000..ec880d5 --- /dev/null +++ b/ALTERADO/compilador.tab.h @@ -0,0 +1,137 @@ +/* A Bison parser, made by GNU Bison 2.3. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + PROGRAM = 258, + ABRE_PARENTESES = 259, + FECHA_PARENTESES = 260, + VIRGULA = 261, + PONTO_E_VIRGULA = 262, + DOIS_PONTOS = 263, + PONTO = 264, + T_BEGIN = 265, + T_END = 266, + VAR = 267, + IDENT = 268, + ATRIBUICAO = 269, + LABEL = 270, + TYPE = 271, + ARRAY = 272, + PROCEDURE = 273, + FUNCTION = 274, + GOTO = 275, + IF = 276, + THEN = 277, + ELSE = 278, + WHILE = 279, + DO = 280, + OR = 281, + DIV = 282, + AND = 283, + NOT = 284, + IGUAL = 285, + DIFERENTE = 286, + MENOR_IGUAL = 287, + MAIOR_IGUAL = 288, + MENOR = 289, + MAIOR = 290, + MAIS = 291, + MENOS = 292, + ASTERISCO = 293, + NUMERO = 294, + READ = 295, + WRITE = 296, + LOWER_THAN_ELSE = 297 + }; +#endif +/* Tokens. */ +#define PROGRAM 258 +#define ABRE_PARENTESES 259 +#define FECHA_PARENTESES 260 +#define VIRGULA 261 +#define PONTO_E_VIRGULA 262 +#define DOIS_PONTOS 263 +#define PONTO 264 +#define T_BEGIN 265 +#define T_END 266 +#define VAR 267 +#define IDENT 268 +#define ATRIBUICAO 269 +#define LABEL 270 +#define TYPE 271 +#define ARRAY 272 +#define PROCEDURE 273 +#define FUNCTION 274 +#define GOTO 275 +#define IF 276 +#define THEN 277 +#define ELSE 278 +#define WHILE 279 +#define DO 280 +#define OR 281 +#define DIV 282 +#define AND 283 +#define NOT 284 +#define IGUAL 285 +#define DIFERENTE 286 +#define MENOR_IGUAL 287 +#define MAIOR_IGUAL 288 +#define MENOR 289 +#define MAIOR 290 +#define MAIS 291 +#define MENOS 292 +#define ASTERISCO 293 +#define NUMERO 294 +#define READ 295 +#define WRITE 296 +#define LOWER_THAN_ELSE 297 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + +extern YYSTYPE yylval; + diff --git a/ALTERADO/lex.yy.c b/ALTERADO/lex.yy.c new file mode 100644 index 0000000..d3651db --- /dev/null +++ b/ALTERADO/lex.yy.c @@ -0,0 +1,2197 @@ + +#line 2 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include <inttypes.h> +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = NULL; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); + +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len ); + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ +typedef flex_uint8_t YY_CHAR; + +FILE *yyin = NULL, *yyout = NULL; + +typedef int yy_state_type; + +extern int yylineno; +int yylineno = 1; + +extern char *yytext; +#ifdef yytext_ptr +#undef yytext_ptr +#endif +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 43 +#define YY_END_OF_BUFFER 44 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[115] = + { 0, + 0, 0, 44, 43, 2, 1, 15, 16, 40, 38, + 13, 39, 14, 41, 12, 11, 36, 32, 37, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 2, 0, 41, 10, 34, + 33, 35, 42, 42, 42, 42, 42, 27, 42, 42, + 42, 42, 23, 42, 42, 28, 42, 42, 42, 42, + 42, 42, 42, 0, 0, 30, 42, 42, 29, 42, + 7, 42, 42, 42, 31, 42, 42, 42, 42, 5, + 42, 42, 3, 42, 42, 25, 42, 22, 42, 42, + 42, 8, 24, 18, 42, 42, 19, 6, 42, 17, + + 42, 42, 26, 9, 42, 42, 42, 42, 42, 4, + 21, 42, 20, 0 + } ; + +static const YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 4, + 5, 6, 7, 8, 9, 10, 1, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, + 15, 16, 1, 1, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 1, 1, 18, 19, 20, 21, + + 22, 23, 24, 25, 26, 17, 17, 27, 28, 29, + 30, 31, 17, 32, 33, 34, 35, 36, 37, 17, + 38, 17, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static const YY_CHAR yy_meta[39] = + { 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3 + } ; + +static const flex_int16_t yy_base[117] = + { 0, + 0, 0, 123, 124, 120, 124, 115, 124, 124, 124, + 124, 124, 124, 109, 104, 124, 24, 124, 103, 0, + 12, 95, 16, 16, 81, 85, 91, 95, 82, 79, + 78, 87, 22, 90, 23, 105, 100, 94, 124, 124, + 124, 124, 0, 83, 71, 78, 65, 0, 67, 78, + 69, 63, 0, 77, 61, 0, 64, 75, 70, 60, + 58, 63, 62, 81, 44, 0, 68, 59, 0, 62, + 0, 63, 52, 59, 0, 32, 59, 50, 56, 0, + 50, 42, 69, 36, 44, 0, 38, 0, 44, 48, + 37, 0, 0, 0, 46, 45, 0, 0, 40, 0, + + 44, 46, 0, 0, 32, 24, 30, 28, 22, 0, + 0, 31, 0, 124, 48, 60 + } ; + +static const flex_int16_t yy_def[117] = + { 0, + 114, 1, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 114, 116, 114, 114, 114, + 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 116, 116, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 0, 114, 114 + } ; + +static const flex_int16_t yy_nxt[163] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 20, + 23, 24, 25, 26, 20, 27, 28, 20, 29, 30, + 31, 32, 20, 33, 20, 34, 35, 20, 40, 41, + 44, 47, 49, 45, 50, 48, 59, 62, 83, 65, + 43, 90, 113, 112, 63, 91, 111, 110, 109, 60, + 64, 108, 64, 107, 106, 105, 104, 103, 102, 101, + 100, 99, 98, 97, 65, 96, 95, 94, 93, 92, + 89, 88, 87, 86, 85, 84, 65, 82, 81, 80, + 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, + + 69, 68, 67, 66, 38, 65, 36, 61, 58, 57, + 56, 55, 54, 53, 52, 51, 46, 42, 39, 38, + 37, 36, 114, 3, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static const flex_int16_t yy_chk[163] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 17, 17, + 21, 23, 24, 21, 24, 23, 33, 35, 65, 65, + 115, 76, 112, 109, 35, 76, 108, 107, 106, 33, + 116, 105, 116, 102, 101, 99, 96, 95, 91, 90, + 89, 87, 85, 84, 83, 82, 81, 79, 78, 77, + 74, 73, 72, 70, 68, 67, 64, 63, 62, 61, + 60, 59, 58, 57, 55, 54, 52, 51, 50, 49, + + 47, 46, 45, 44, 38, 37, 36, 34, 32, 31, + 30, 29, 28, 27, 26, 25, 22, 19, 15, 14, + 7, 5, 3, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "compilador.l" +/* ------------------------------------------------------------------- + * Arquivo: compilador.l + * ------------------------------------------------------------------- + * Autor: Bruno Muller Junior + * Data: 08/2007 + * Atualizado em: [09/08/2020, 19h:01m] + * + * ------------------------------------------------------------------- + * + * Tipos, protótipos e variáveis globais do compilador (via extern) + * + * ------------------------------------------------------------------- */ +#line 16 "compilador.l" + + +#include<stdio.h> +#include<string.h> + +#include "compilador.h" +#include "compilador.tab.h" + +//#define IMPRIME(STR) {}; +#define IMPRIME(STR) printf("%s # %s \n", STR, token); + +int nl = 1; + +#line 540 "lex.yy.c" +#line 541 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include <unistd.h> +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals ( void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( void ); + +int yyget_debug ( void ); + +void yyset_debug ( int debug_flag ); + +YY_EXTRA_TYPE yyget_extra ( void ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in ( void ); + +void yyset_in ( FILE * _in_str ); + +FILE *yyget_out ( void ); + +void yyset_out ( FILE * _out_str ); + + yy_size_t yyget_leng ( void ); + +char *yyget_text ( void ); + +int yyget_lineno ( void ); + +void yyset_lineno ( int _line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( void ); +#else +extern int yywrap ( void ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr ); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( void ); +#else +static int input ( void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + yy_size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 41 "compilador.l" + + +#line 761 "lex.yy.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 124 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 43 "compilador.l" +{nl++;} + YY_BREAK +case 2: +YY_RULE_SETUP +#line 45 "compilador.l" + + YY_BREAK +case 3: +YY_RULE_SETUP +#line 47 "compilador.l" + + YY_BREAK +case 4: +YY_RULE_SETUP +#line 49 "compilador.l" +{ simbolo = simb_program; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("program "); + return PROGRAM; + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 55 "compilador.l" +{ simbolo = simb_var; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("var "); + return VAR; + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 61 "compilador.l" +{ simbolo = simb_begin; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("begin "); + return T_BEGIN; + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 67 "compilador.l" +{ simbolo = simb_end; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("end "); + return T_END; + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 73 "compilador.l" +{ simbolo = simb_read; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("read "); + return READ; +} + YY_BREAK +case 9: +YY_RULE_SETUP +#line 79 "compilador.l" +{ simbolo = simb_write; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("write "); + return WRITE; +} + YY_BREAK +case 10: +YY_RULE_SETUP +#line 85 "compilador.l" +{ simbolo = simb_atribuicao; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" atribuicao "); + return ATRIBUICAO; + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 91 "compilador.l" +{ simbolo = simb_ponto_e_virgula; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" pt_virgula "); + return PONTO_E_VIRGULA; + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 97 "compilador.l" +{ simbolo = simb_dois_pontos; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" dois pontos "); + return DOIS_PONTOS; + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 103 "compilador.l" +{ simbolo = simb_virgula; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" virgula "); + return VIRGULA; + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 110 "compilador.l" +{ simbolo = simb_ponto; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" ponto "); + return PONTO; + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 116 "compilador.l" +{ simbolo = simb_abre_parenteses; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" abre_parenteses "); + return ABRE_PARENTESES; + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 122 "compilador.l" +{ simbolo = simb_fecha_parenteses; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" fecha_parenteses "); + return FECHA_PARENTESES; + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 128 "compilador.l" +{ simbolo = simb_label; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("label "); + return LABEL; + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 134 "compilador.l" +{ simbolo = simb_type; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("type "); + return TYPE; + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 140 "compilador.l" +{ simbolo = simb_array; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("array "); + return ARRAY; + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 146 "compilador.l" +{ simbolo = simb_procedure; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("procedure "); + return PROCEDURE; + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 152 "compilador.l" +{ simbolo = simb_function; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("function "); + return FUNCTION; + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 158 "compilador.l" +{ simbolo = simb_goto; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("goto "); + return GOTO; + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 164 "compilador.l" +{ simbolo = simb_if; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("if "); + return IF; + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 170 "compilador.l" +{ simbolo = simb_then; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" then "); + return THEN; + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 176 "compilador.l" +{ simbolo = simb_else; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" else "); + return ELSE; + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 182 "compilador.l" +{ simbolo = simb_while; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME("while "); + return WHILE; + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 188 "compilador.l" +{ simbolo = simb_do; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" do "); + return DO; + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 194 "compilador.l" +{ simbolo = simb_or; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" or "); + return OR; + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 200 "compilador.l" +{ simbolo = simb_div; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" div "); + return DIV; + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 206 "compilador.l" +{ simbolo = simb_and; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" and "); + return AND; + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 212 "compilador.l" +{ simbolo = simb_not; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" not "); + return NOT; + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 218 "compilador.l" +{ simbolo = simb_igual; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" igual "); + return IGUAL; + } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 224 "compilador.l" +{ simbolo = simb_diferente; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" diferente "); + return DIFERENTE; + } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 230 "compilador.l" +{ simbolo = simb_menor_igual; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" menor_igual "); + return MENOR_IGUAL; + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 236 "compilador.l" +{ simbolo = simb_maior_igual; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" maior_igual "); + return MAIOR_IGUAL; + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 242 "compilador.l" +{ simbolo = simb_menor; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" menor "); + return MENOR; + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 248 "compilador.l" +{ simbolo = simb_maior; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" maior "); + return MAIOR; + } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 254 "compilador.l" +{ simbolo = simb_mais; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" mais "); + return MAIS; + } + YY_BREAK +case 39: +YY_RULE_SETUP +#line 260 "compilador.l" +{ simbolo = simb_menos; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" menos "); + return MENOS; + } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 266 "compilador.l" +{ simbolo = simb_asterisco; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" asterisco "); + return ASTERISCO; + } + YY_BREAK +case 41: +YY_RULE_SETUP +#line 272 "compilador.l" +{ simbolo = simb_numero; + strncpy (token, yytext,TAM_TOKEN); + IMPRIME(" numero "); + return NUMERO; + } + YY_BREAK +case 42: +YY_RULE_SETUP +#line 278 "compilador.l" +{ simbolo = simb_identificador; + strncpy (token, yytext, TAM_TOKEN); + IMPRIME(" ident "); + return IDENT; + } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 284 "compilador.l" +ECHO; + YY_BREAK +#line 1190 "lex.yy.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 115 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_is_jam = (yy_current_state == 114); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp ) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + yy_size_t number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr ) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg ) +{ + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +yy_size_t yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param _line_number line number + * + */ +void yyset_lineno (int _line_number ) +{ + + yylineno = _line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str ) +{ + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str ) +{ + yyout = _out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int _bdebug ) +{ + yy_flex_debug = _bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = NULL; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = NULL; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 284 "compilador.l" + + diff --git a/ALTERADO/stack/stack.o b/ALTERADO/stack/stack.o new file mode 100644 index 0000000000000000000000000000000000000000..c24c7e8e435160fb879533b12b2971f9415cf5a4 GIT binary patch literal 2056 zcmX^A>+L@t1_nk31_;5zz`(Er#8Uu?Ffd3mFfdqv_z*4z*}x1Dx&c)K<Fhj`Fn};r znjt>EB(<Uhq83EP$A`E^gn(G6IE4wq2bl+AMzAt4$bf`c7#ctn49CYO7nc-e=A}ag z(9MIHGYu+l1M(P@4WdA1gJ>9zk5A6eEl5l*i7(A7&&*4SkN0tb$$@F8M_`V)!NR}* z60%@pV1OEpVx$oR1A_!KOc@yX85kJ(!N!0Tfy5)&7#IW@7#K3x85kBYFfed4Ffasw zRWLAcFhDTKTpk7n23DvzDb#;whKmo_8GgQCclasK2&Fk0cK&x}n0SCW{@VY;3>W`a zGp+pF%rJ35v;2>T+zdZoa6A0uU}X6Cf_=VJ1_OgRBLjno3<HA*15?8#1_p*HAoCV9 z$NvDaIanAbGW>P83}S=qV1U}e!07OEVRQTsCWeMdU^%dv4nJSAJN(pOg}CD-x5G~j zMuwkYn$uw?2P=c11}DQ#kbQrvomT!oOoSW7=Sy)gLfi;(H>TUg85l%haxb7^!NKYP zu@}|;LXiC+zk&S1$msAB?tXTMpCCVh{PF<AW?+~?$ek;i<9~p|5y_1ZF@zgWK*N`T zfnfpz1H(j+`I?}xM&iTdK;aIOf62@+k%NI@0tX|*L{Rv_<Uw*Ux54ar!Oid!<W7kH z89u%cpD(onExbVHp_>C%&+70Kr2pgp|KiAYfXqXVpMcDqj6{Xh;*!G)70ME;G7}Z@ zOBM1CFV0uU%*#y9Ow7rwN=!-A<6__ftF+=`(4{)yVyID2)ipFIR;b}(@GMEqMav}M zVoZPml<iPtz~T%H3`-!QpsWUALCGUfdIf~Wkk5gZcc9F`051X{ia}%m6FArF`Y?gZ z2_Fv#ZEFG*H(&ziYabm5ZTp20qW%q(e!&Qle*&Rx?=XTb@d1^KEDQ{`7oh4+Fha~f z0-<dWK*jekGJrho11igz7#M6fK*iTEg3EcI6%g7sf{}rNmw`by07|<sGBEHkFzB{0 zK<Eqx1_nL`2HhA21_l9;Iw(H@Qns-<Kxt5TGBPl*f&31lXM)s0!w4$Iz{kYE04tY4 zi5|r7g~m)HNIeq+!!#&A6UzSz<rhKuub})cC?95CHHZ%?kU^M%fdN#t@G~+nz~T|) zUJxJTPLO-#7#J8pd=MLi4WN8jyb3`41(E_|H#EKv8s83$4=TfvywAXp6R%fXQp6Bn zTvC*in#T|y4`L-3RK_P~WHZDgGE97NNn&y~Lws(2aY<1kj8{;UnOBm=5T90*n#vHL zo0yZ6pUe=Sl3JXaTL8+14Dm1q#2!5psD*mQ3^^sa1x7Hg5twTT;~Ijw1`G@Uk%)AN literal 0 HcmV?d00001 diff --git a/ALTERADO/ts/ts.o b/ALTERADO/ts/ts.o new file mode 100644 index 0000000000000000000000000000000000000000..bd69dcebf38579ca43f07d9c463a8aa80489343e GIT binary patch literal 11248 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 MWdvs#8Za;b00X}O-2eap literal 0 HcmV?d00001 diff --git a/AvaliaTrabs/Exemplo7.02/pgma.pas b/AvaliaTrabs/Exemplo7.02/pgma.pas index e6a65e7..bd2e422 100755 --- a/AvaliaTrabs/Exemplo7.02/pgma.pas +++ b/AvaliaTrabs/Exemplo7.02/pgma.pas @@ -6,7 +6,7 @@ var n, s, i : integer; q:=i*i; if (i div 2) * 2 = i then - s:=s+q; + s:=s+q else s:=s-q; end; diff --git a/AvaliaTrabs/Exemplo7.03/pgma.pas b/AvaliaTrabs/Exemplo7.03/pgma.pas index 85d8c6b..f00244f 100755 --- a/AvaliaTrabs/Exemplo7.03/pgma.pas +++ b/AvaliaTrabs/Exemplo7.03/pgma.pas @@ -5,7 +5,7 @@ var z, t : integer; begin t:=2*t; x:=2*t; - z:=x+1 + z:=x+1; end; begin z:=3; @@ -13,6 +13,6 @@ begin g(t); write (z,t); g(z); write (z,t); g(t+z); write (z,t); - g(7); write (z,t) + g(7); write (z,t); end. \ No newline at end of file diff --git a/AvaliaTrabs/Exemplo7.04/pgma.pas b/AvaliaTrabs/Exemplo7.04/pgma.pas index 290d2dc..ff40573 100755 --- a/AvaliaTrabs/Exemplo7.04/pgma.pas +++ b/AvaliaTrabs/Exemplo7.04/pgma.pas @@ -4,7 +4,7 @@ var z, x: integer; var y : integer; begin y:=t*t; z:=z+x+y; - write(z) + write(z); end; procedure h (y : integer); @@ -13,19 +13,19 @@ var z, x: integer; var t : integer; begin t:=z+x+y; g(t); - z:=t + z:=t; end; begin x:=y+1; f(x); - g(z+x) + g(z+x); end; begin z:=1; x:=3; h(x); g(x); - write(x,z) + write(x,z); end. diff --git a/AvaliaTrabs/Exemplo7.05/pgma.pas b/AvaliaTrabs/Exemplo7.05/pgma.pas index a0a60b1..9e4574f 100755 --- a/AvaliaTrabs/Exemplo7.05/pgma.pas +++ b/AvaliaTrabs/Exemplo7.05/pgma.pas @@ -5,16 +5,16 @@ var p, q : integer; begin if n<2 then begin - f:=n; k:=0 + f:=n; k:=0; end else begin f:=f(n-1,p) + f(n-2,q); - k:=p+q+1 + k:=p+q+1; end; - write (n, k) + write (n, k); end; begin n:=f(3,m); - write(n, m) + write(n, m); end. diff --git a/AvaliaTrabs/Exemplo8.05/pgma.pas b/AvaliaTrabs/Exemplo8.05/pgma.pas index c243468..09926bb 100755 --- a/AvaliaTrabs/Exemplo8.05/pgma.pas +++ b/AvaliaTrabs/Exemplo8.05/pgma.pas @@ -10,7 +10,7 @@ begin f3:=f1+f2; f1:=f2; f2:=f3; - k:=k+1 + k:=k+1; end; - write(n, f1) + write(n, f1); end. diff --git a/AvaliaTrabs/Exemplo8.06/pgma.pas b/AvaliaTrabs/Exemplo8.06/pgma.pas index 58f7185..bd4ee10 100755 --- a/AvaliaTrabs/Exemplo8.06/pgma.pas +++ b/AvaliaTrabs/Exemplo8.06/pgma.pas @@ -7,10 +7,10 @@ var x, y : integer; if z>1 then p else y:=1; - y:=y*z + y:=y*z; end; begin read (x); p; - write (x,y) + write (x,y); end. diff --git a/AvaliaTrabs/Exemplo8.07/pgma.pas b/AvaliaTrabs/Exemplo8.07/pgma.pas index 353372f..cd2ece7 100755 --- a/AvaliaTrabs/Exemplo8.07/pgma.pas +++ b/AvaliaTrabs/Exemplo8.07/pgma.pas @@ -7,7 +7,7 @@ begin if z>1 then p else y:=1; - y:=y*z + y:=y*z; end; procedure q; @@ -19,11 +19,11 @@ begin if ( (s div 2)*2) = s then q else p; - y:=y*s + y:=y*s; end; begin read(x); q; - write(y) + write(y); end. diff --git a/AvaliaTrabs/Exemplo8.08/pgma.pas b/AvaliaTrabs/Exemplo8.08/pgma.pas index 20147b2..97d766c 100755 --- a/AvaliaTrabs/Exemplo8.08/pgma.pas +++ b/AvaliaTrabs/Exemplo8.08/pgma.pas @@ -9,17 +9,17 @@ var x, y : integer; if s=1 then p else y:=1; - y:=y*s + y:=y*s; end; begin z:=x; x:=x-1; if z>1 then p else y:=1; - y:=y*z + y:=y*z; end; begin read(x); p; - write(y) + write(y); end. diff --git a/AvaliaTrabs/Exemplo8.09/pgma.pas b/AvaliaTrabs/Exemplo8.09/pgma.pas index 887102c..9b3f390 100755 --- a/AvaliaTrabs/Exemplo8.09/pgma.pas +++ b/AvaliaTrabs/Exemplo8.09/pgma.pas @@ -7,10 +7,10 @@ var x, y : integer; then p(t-1) else y:=1; z:=y; - y:=z*t + y:=z*t; end; begin read(x); p(x); - write(y) + write(y); end. diff --git a/AvaliaTrabs/Exemplo8.10/pgma.pas b/AvaliaTrabs/Exemplo8.10/pgma.pas index 9bf3a63..be20887 100755 --- a/AvaliaTrabs/Exemplo8.10/pgma.pas +++ b/AvaliaTrabs/Exemplo8.10/pgma.pas @@ -10,13 +10,13 @@ begin h:=g; p(n-1,h); g:=h; - p(n-2, g) + p(n-2, g); end; - write(n,g) + write(n,g); end; begin k:=0; - p(3,k) + p(3,k); end. diff --git a/AvaliaTrabs/ExemploErro1/pgma.pas b/AvaliaTrabs/ExemploErro1/pgma.pas index 353874f..af541d0 100755 --- a/AvaliaTrabs/ExemploErro1/pgma.pas +++ b/AvaliaTrabs/ExemploErro1/pgma.pas @@ -4,5 +4,5 @@ begin read (n); read (k); n := n>k; - write (n) + write (n); end. diff --git a/AvaliaTrabs/ExemploErro2/pgma.pas b/AvaliaTrabs/ExemploErro2/pgma.pas index 3430f06..221394e 100755 --- a/AvaliaTrabs/ExemploErro2/pgma.pas +++ b/AvaliaTrabs/ExemploErro2/pgma.pas @@ -4,5 +4,5 @@ begin read (n); read (k); if (n+1) then n:=1; - write (n) + write (n); end. diff --git a/AvaliaTrabs/MEPA b/AvaliaTrabs/MEPA index 83d8e77..886e7b6 100644 --- a/AvaliaTrabs/MEPA +++ b/AvaliaTrabs/MEPA @@ -1,11 +1,46 @@ INPP - AMEM 3 + AMEM 1 DSVS R00 R01: ENPR 1 AMEM 1 DSVS R02 R02: NADA - CRVL 0, 2 - CRVL 0, 2 - MULT + CRVL 1, -5 + CRCT 2 + CMME + DSVF R03 + CRVI 1, -4 + CRVL 1, -5 + SOMA + ARMI 1, -4 + DSVS R04 +R03: NADA + CRVI 1, -4 ARMZ 1, 0 + CRVL 1, -5 + CRCT 1 + SUBT + CREN 1, 0 + CHPR R01, 1 + CRVL 1, 0 + ARMI 1, -4 + CRVL 1, -5 + CRCT 2 + SUBT + CREN 1, -4 + CHPR R01, 1 +R04: NADA + CRVL 1, -5 + IMPR + CRVI 1, -4 + IMPR + DMEM 1 + RTPR 1, 2 +R00: NADA + CRCT 0 + ARMZ 0, 0 + CRCT 3 + CREN 0, 0 + CHPR R01, 0 + DMEM 1 + PARA diff --git a/AvaliaTrabs/compilador b/AvaliaTrabs/compilador index 9b92e31a6a75801f4dfb38b1536c6d239686e8f4..418d2e5150ad0514bff0d362109afc3681e4d3a3 100755 GIT binary patch literal 88872 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 LJBYaKX<+~W065td literal 54640 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 E05H4QyZ`_I diff --git a/AvaliaTrabs/pgma.pas b/AvaliaTrabs/pgma.pas index 3430f06..221394e 100755 --- a/AvaliaTrabs/pgma.pas +++ b/AvaliaTrabs/pgma.pas @@ -4,5 +4,5 @@ begin read (n); read (k); if (n+1) then n:=1; - write (n) + write (n); end. diff --git a/AvaliaTrabs/res b/AvaliaTrabs/res index e69de29..0d287c1 100644 --- a/AvaliaTrabs/res +++ b/AvaliaTrabs/res @@ -0,0 +1,69 @@ +program # program + ident # exemploErro2 + abre_parenteses # ( + ident # input + virgula # , + ident # output + fecha_parenteses # ) + pt_virgula # ; +var # var + ident # n + virgula # , + ident # k + dois pontos # : + ident # integer + +Tabela de Símbolos: +---------------------------------------------------------------------------------- +| Ident | Categ | Nivel | Tipo | Desloc | Detalhes | +---------------------------------------------------------------------------------- +| k | VS | 0 | Inteiro | 1 | - | +| n | VS | 0 | Inteiro | 0 | - | +---------------------------------------------------------------------------------- + pt_virgula # ; +begin # begin +read # read + abre_parenteses # ( + ident # n + fecha_parenteses # ) + pt_virgula # ; +read # read + abre_parenteses # ( + ident # k + fecha_parenteses # ) + pt_virgula # ; +if # if + abre_parenteses # ( + ident # n + mais # + + +Tabela de Símbolos: +---------------------------------------------------------------------------------- +| Ident | Categ | Nivel | Tipo | Desloc | Detalhes | +---------------------------------------------------------------------------------- +| k | VS | 0 | Inteiro | 1 | - | +| n | VS | 0 | Inteiro | 0 | - | +---------------------------------------------------------------------------------- + numero # 1 + fecha_parenteses # ) + then # then + ident # n + atribuicao # := + numero # 1 + pt_virgula # ; +write # write + abre_parenteses # ( + ident # n + fecha_parenteses # ) + +Tabela de Símbolos: +---------------------------------------------------------------------------------- +| Ident | Categ | Nivel | Tipo | Desloc | Detalhes | +---------------------------------------------------------------------------------- +| k | VS | 0 | Inteiro | 1 | - | +| n | VS | 0 | Inteiro | 0 | - | +---------------------------------------------------------------------------------- + pt_virgula # ; +end # end +Tabela de Símbolos está vazia ou não inicializada. + ponto # . -- GitLab