aboutsummaryrefslogtreecommitdiff
path: root/gen/gen_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'gen/gen_parser.c')
-rw-r--r--gen/gen_parser.c190
1 files changed, 164 insertions, 26 deletions
diff --git a/gen/gen_parser.c b/gen/gen_parser.c
index 173e6c1..7375732 100644
--- a/gen/gen_parser.c
+++ b/gen/gen_parser.c
@@ -276,7 +276,39 @@ enum yysymbol_kind_t
YYSYMBOL_PRINT = 35, /* "print" */
YYSYMBOL_END = 36, /* "end" */
YYSYMBOL_YYACCEPT = 37, /* $accept */
- YYSYMBOL_input = 38 /* input */
+ YYSYMBOL_statement_list = 38, /* statement_list */
+ YYSYMBOL_definitions = 39, /* definitions */
+ YYSYMBOL_variable_definition = 40, /* variable_definition */
+ YYSYMBOL_variable_definitions = 41, /* variable_definitions */
+ YYSYMBOL_opt_variable_definitions = 42, /* opt_variable_definitions */
+ YYSYMBOL_return = 43, /* return */
+ YYSYMBOL_opt_return = 44, /* opt_return */
+ YYSYMBOL_function_definition = 45, /* function_definition */
+ YYSYMBOL_procedure_definition = 46, /* procedure_definition */
+ YYSYMBOL_formals = 47, /* formals */
+ YYSYMBOL_opt_formals = 48, /* opt_formals */
+ YYSYMBOL_formal_arg = 49, /* formal_arg */
+ YYSYMBOL_procedure_call = 50, /* procedure_call */
+ YYSYMBOL_arguments = 51, /* arguments */
+ YYSYMBOL_opt_arguments = 52, /* opt_arguments */
+ YYSYMBOL_assignment = 53, /* assignment */
+ YYSYMBOL_lvalue = 54, /* lvalue */
+ YYSYMBOL_rvalue = 55, /* rvalue */
+ YYSYMBOL_print_statement = 56, /* print_statement */
+ YYSYMBOL_print_items = 57, /* print_items */
+ YYSYMBOL_print_item = 58, /* print_item */
+ YYSYMBOL_statement = 59, /* statement */
+ YYSYMBOL_until_statement = 60, /* until_statement */
+ YYSYMBOL_unless_statement = 61, /* unless_statement */
+ YYSYMBOL_expression = 62, /* expression */
+ YYSYMBOL_simple_expr = 63, /* simple_expr */
+ YYSYMBOL_term = 64, /* term */
+ YYSYMBOL_factor = 65, /* factor */
+ YYSYMBOL_atom = 66, /* atom */
+ YYSYMBOL_function_call = 67, /* function_call */
+ YYSYMBOL_unless_expression = 68, /* unless_expression */
+ YYSYMBOL_opt_definitions = 69, /* opt_definitions */
+ YYSYMBOL_program = 70 /* program */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -322,7 +354,7 @@ static void yyerror(YYLTYPE *yylloc, void *lexer,
struct parser *parser, const char *msg);
-#line 326 "gen/gen_parser.c"
+#line 358 "gen/gen_parser.c"
#ifdef short
@@ -435,7 +467,7 @@ typedef int yytype_uint16;
/* Stored state numbers (used for stacks). */
-typedef yytype_int8 yy_state_t;
+typedef yytype_uint8 yy_state_t;
/* State numbers in computations. */
typedef int yy_state_fast_t;
@@ -647,18 +679,18 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 2
+#define YYFINAL 26
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 0
+#define YYLAST 140
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 37
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 2
+#define YYNNTS 34
/* YYNRULES -- Number of rules. */
-#define YYNRULES 2
+#define YYNRULES 69
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 3
+#define YYNSTATES 132
/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 291
@@ -709,9 +741,15 @@ static const yytype_int8 yytranslate[] =
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
-static const yytype_uint8 yyrline[] =
+static const yytype_int16 yyrline[] =
{
- 0, 147, 147
+ 0, 148, 148, 149, 152, 153, 154, 157, 160, 161,
+ 164, 165, 168, 171, 172, 175, 179, 184, 185, 188,
+ 189, 192, 195, 198, 199, 202, 203, 206, 209, 210,
+ 213, 214, 217, 220, 221, 224, 225, 228, 229, 230,
+ 231, 232, 233, 236, 239, 240, 243, 244, 245, 248,
+ 249, 250, 253, 254, 255, 258, 259, 260, 263, 264,
+ 265, 266, 267, 268, 269, 272, 275, 278, 279, 282
};
#endif
@@ -733,7 +771,15 @@ static const char *const yytname[] =
"\",\"", "\".\"", "\"=\"", "\"<\"", "\"+\"", "\"-\"", "\"*\"", "\"/\"",
"\"var\"", "\"is\"", "\"unless\"", "\"otherwise\"", "\"until\"",
"\"do\"", "\"done\"", "\"procedure\"", "\"function\"", "\"return\"",
- "\"print\"", "\"end\"", "$accept", "input", YY_NULLPTR
+ "\"print\"", "\"end\"", "$accept", "statement_list", "definitions",
+ "variable_definition", "variable_definitions",
+ "opt_variable_definitions", "return", "opt_return",
+ "function_definition", "procedure_definition", "formals", "opt_formals",
+ "formal_arg", "procedure_call", "arguments", "opt_arguments",
+ "assignment", "lvalue", "rvalue", "print_statement", "print_items",
+ "print_item", "statement", "until_statement", "unless_statement",
+ "expression", "simple_expr", "term", "factor", "atom", "function_call",
+ "unless_expression", "opt_definitions", "program", YY_NULLPTR
};
static const char *
@@ -743,7 +789,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#define YYPACT_NINF (-1)
+#define YYPACT_NINF (-17)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -757,7 +803,20 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -1, 0, -1
+ 1, -4, 27, -1, -17, -17, -17, -17, -3, 47,
+ 31, 62, 60, 61, 84, -3, 83, 77, -17, -17,
+ -17, 75, -17, 79, -17, -17, -17, 83, 95, 95,
+ 96, 83, -16, -17, -17, 88, 98, 83, 59, 59,
+ -17, 5, 17, 22, -17, -17, -17, -17, -17, 94,
+ 5, 48, -3, 5, 100, -17, 99, 97, 101, -17,
+ -17, 106, 23, 83, 83, 111, 83, -2, -17, -17,
+ 83, 83, 83, 83, 83, 83, 77, 83, -17, 5,
+ -17, -17, 112, 85, 95, 85, -17, 83, -5, 5,
+ -17, 110, -17, 17, 17, 22, 22, -17, -17, -17,
+ 10, 109, 116, -17, 102, -17, 102, 5, -3, -17,
+ 83, -17, -17, 102, -17, 103, 104, 92, 0, -17,
+ -3, 48, -17, 83, 89, 90, -10, 105, 91, -17,
+ -17, -17
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -765,51 +824,123 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_int8 yydefact[] =
{
- 2, 0, 1
+ 68, 0, 0, 0, 67, 6, 4, 5, 0, 0,
+ 0, 0, 0, 28, 0, 0, 0, 0, 69, 37,
+ 38, 0, 39, 3, 40, 41, 1, 0, 20, 20,
+ 0, 26, 0, 61, 60, 58, 0, 0, 0, 0,
+ 63, 42, 46, 49, 52, 57, 62, 35, 32, 34,
+ 36, 0, 0, 7, 0, 19, 0, 18, 0, 29,
+ 25, 0, 24, 0, 0, 0, 26, 0, 55, 56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 27, 30,
+ 31, 2, 0, 14, 0, 0, 22, 0, 44, 43,
+ 59, 0, 64, 47, 48, 50, 51, 53, 54, 33,
+ 0, 0, 0, 13, 11, 17, 11, 23, 0, 65,
+ 0, 21, 12, 9, 10, 0, 0, 0, 0, 8,
+ 0, 0, 45, 0, 0, 0, 0, 0, 0, 66,
+ 16, 15
};
/* YYPGOTO[NTERM-NUM]. */
-static const yytype_int8 yypgoto[] =
+static const yytype_int16 yypgoto[] =
{
- -1, -1
+ -17, -11, -17, 128, 18, 26, 49, -17, -17, -17,
+ -17, 107, 51, -8, -17, 67, -17, -17, 19, -17,
+ 63, -17, -17, -17, -17, -15, -12, 2, -14, 38,
+ -17, -17, -17, -17
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- 0, 1
+ 0, 18, 4, 113, 114, 115, 103, 104, 6, 7,
+ 55, 56, 57, 40, 60, 61, 20, 21, 78, 22,
+ 48, 49, 23, 24, 25, 50, 42, 43, 44, 45,
+ 46, 80, 8, 9
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule whose
number is the opposite. If YYTABLE_NINF, syntax error. */
-static const yytype_int8 yytable[] =
+static const yytype_uint8 yytable[] =
{
- 2
+ 19, 41, 10, 13, 32, 14, 12, 19, 92, 70,
+ 71, 63, 53, 64, 70, 71, 62, 70, 71, 70,
+ 71, 129, 67, 108, 70, 71, 1, 15, 123, 70,
+ 71, 16, 17, 2, 3, 11, 79, 110, 72, 73,
+ 87, 81, 70, 71, 19, 74, 75, 26, 88, 89,
+ 27, 62, 33, 34, 35, 36, 14, 37, 93, 94,
+ 97, 98, 100, 33, 34, 35, 36, 14, 37, 38,
+ 39, 28, 107, 29, 95, 96, 68, 69, 77, 30,
+ 47, 33, 34, 35, 36, 14, 37, 33, 34, 35,
+ 36, 14, 37, 31, 51, 118, 52, 117, 38, 39,
+ 19, 54, 59, 65, 38, 39, 79, 66, 126, 124,
+ 76, 82, 19, 83, 84, 85, 86, 90, 101, 102,
+ 109, 111, 112, 122, 131, 127, 128, 1, 5, 120,
+ 121, 119, 116, 91, 106, 105, 58, 130, 0, 99,
+ 125
};
static const yytype_int8 yycheck[] =
{
- 0
+ 8, 16, 6, 6, 15, 8, 7, 15, 10, 19,
+ 20, 27, 27, 29, 19, 20, 31, 19, 20, 19,
+ 20, 31, 37, 28, 19, 20, 25, 30, 28, 19,
+ 20, 34, 35, 32, 33, 8, 51, 27, 21, 22,
+ 17, 52, 19, 20, 52, 23, 24, 0, 63, 64,
+ 19, 66, 4, 5, 6, 7, 8, 9, 70, 71,
+ 74, 75, 77, 4, 5, 6, 7, 8, 9, 21,
+ 22, 9, 87, 13, 72, 73, 38, 39, 30, 18,
+ 3, 4, 5, 6, 7, 8, 9, 4, 5, 6,
+ 7, 8, 9, 9, 19, 110, 17, 108, 21, 22,
+ 108, 6, 6, 15, 21, 22, 121, 9, 123, 120,
+ 16, 11, 120, 14, 17, 14, 10, 6, 6, 34,
+ 10, 12, 6, 31, 33, 36, 36, 25, 0, 26,
+ 26, 113, 106, 66, 85, 84, 29, 32, -1, 76,
+ 121
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 38, 0
+ 0, 25, 32, 33, 39, 40, 45, 46, 69, 70,
+ 6, 8, 7, 6, 8, 30, 34, 35, 38, 50,
+ 53, 54, 56, 59, 60, 61, 0, 19, 9, 13,
+ 18, 9, 38, 4, 5, 6, 7, 9, 21, 22,
+ 50, 62, 63, 64, 65, 66, 67, 3, 57, 58,
+ 62, 19, 17, 62, 6, 47, 48, 49, 48, 6,
+ 51, 52, 62, 27, 29, 15, 9, 62, 66, 66,
+ 19, 20, 21, 22, 23, 24, 16, 30, 55, 62,
+ 68, 38, 11, 14, 17, 14, 10, 17, 62, 62,
+ 6, 52, 10, 63, 63, 64, 64, 65, 65, 57,
+ 62, 6, 34, 43, 44, 49, 43, 62, 28, 10,
+ 27, 12, 6, 40, 41, 42, 42, 38, 62, 41,
+ 26, 26, 31, 28, 38, 55, 62, 36, 36, 31,
+ 32, 33
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int8 yyr1[] =
{
- 0, 37, 38
+ 0, 37, 38, 38, 39, 39, 39, 40, 41, 41,
+ 42, 42, 43, 44, 44, 45, 46, 47, 47, 48,
+ 48, 49, 50, 51, 51, 52, 52, 53, 54, 54,
+ 55, 55, 56, 57, 57, 58, 58, 59, 59, 59,
+ 59, 59, 59, 60, 61, 61, 62, 62, 62, 63,
+ 63, 63, 64, 64, 64, 65, 65, 65, 66, 66,
+ 66, 66, 66, 66, 66, 67, 68, 69, 69, 70
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
static const yytype_int8 yyr2[] =
{
- 0, 2, 0
+ 0, 2, 3, 1, 1, 1, 1, 4, 2, 1,
+ 1, 0, 2, 1, 0, 11, 11, 3, 1, 1,
+ 0, 4, 4, 3, 1, 1, 0, 3, 1, 3,
+ 1, 1, 2, 3, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 4, 4, 7, 1, 3, 3, 1,
+ 3, 3, 1, 3, 3, 2, 2, 1, 1, 3,
+ 1, 1, 1, 1, 3, 4, 7, 1, 0, 2
};
@@ -1668,8 +1799,14 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
+ case 68: /* opt_definitions: %empty */
+#line 279 "src/parser.y"
+ {}
+#line 1806 "gen/gen_parser.c"
+ break;
-#line 1673 "gen/gen_parser.c"
+
+#line 1810 "gen/gen_parser.c"
default: break;
}
@@ -1898,7 +2035,7 @@ yyreturnlab:
return yyresult;
}
-#line 149 "src/parser.y"
+#line 284 "src/parser.y"
#include "gen_lexer.inc"
@@ -1992,5 +2129,6 @@ void parse(struct parser *p, const char *fname, const char *buf)
// runs
dump_lex(p);
- // yyparse(p->lexer, p);
+ yy_scan_string(buf, p->lexer);
+ yyparse(p->lexer, p);
}