static void yy_reduce_proc(YY_PARSER pParser, int yyrule, YY_MINOR_TYPE yypgotominor, YY_STACK_ENTRY [] yystack) { if (reduceprocs[yyrule] != null) { reduceprocs[yyrule].reduce_proc(pParser, yypgotominor, yystack); } }
static void yy_destructor(int yymajor, YY_MINOR_TYPE yypminor) { if (freeprocs[yymajor] != null) { freeprocs[yymajor].destructor_proc(yypminor); } }
/* syntax error */ static void yy_syntax_error(YY_PARSER pParser, int yymajor, YY_MINOR_TYPE yypminor) { /* #line 13 "gram.y" */ Console.WriteLine("Syntax Error! \n By Shift " + yymajor + " value(" + yypminor.yy_11 + ")"); /* #line 463 "yy_table.cs" */ }
/* reduce function */ public void reduce_proc(YY_PARSER pParser, YY_MINOR_TYPE yypgotominor, YY_STACK_ENTRY [] yystack) { /* #line 34 "gram.y" */ yypgotominor.yy_11 = yystack[pParser.yystack_top + (-2)].yyminor.yy_11 * yystack[pParser.yystack_top + (0)].yyminor.yy_11; /* #line 212 "yy_table.cs" */ }
/* reduce function */ public void reduce_proc(YY_PARSER pParser, YY_MINOR_TYPE yypgotominor, YY_STACK_ENTRY [] yystack) { /* #line 22 "gram.y" */ Console.WriteLine("Result = " + yystack[pParser.yystack_top + (0)].yyminor.yy_11); /* #line 179 "yy_table.cs" */ }
/* reduce function */ public void reduce_proc(YY_PARSER pParser, YY_MINOR_TYPE yypgotominor, YY_STACK_ENTRY [] yystack) { /* #line 38 "gram.y" */ if (yystack[pParser.yystack_top + (0)].yyminor.yy_11 != 0) { yypgotominor.yy_11 = yystack[pParser.yystack_top + (-2)].yyminor.yy_11 / yystack[pParser.yystack_top + (0)].yyminor.yy_11; } else { Console.WriteLine("Divide by zero!"); } /* #line 226 "yy_table.cs" */ }
static void yy_reduce(YY_PARSER pParser, int yyrule) { int yygoto; int yyaction; int yysize; YY_MINOR_TYPE yygotominor = new YY_MINOR_TYPE(); if (DEBUG != 0) { if (yytraceWriter != null && yyrule >= 0 && yyrule < yy_ruleName.Length) /* missing realloc process or realloc stack failure */ { yy_traceFile(yytraceWriter, yytracePrompt + "Reduce [" + yy_ruleName[yyrule] + "]\r\n"); } } /* DEBUG */ yy_reduce_proc(pParser, yyrule, yygotominor, pParser.yystack); /* invoke reduce code */ yygoto = yyruleInfo[yyrule].lhs; yysize = yyruleInfo[yyrule].nrhs; yyaction = yy_find_reduce_action(pParser.yystack[pParser.yystack_top - yysize].yystate, yygoto); pParser.yystack_top -= yysize; if (yyaction < YY_NSTATE)/* nonterminal shift so yyaction need less state number */ { if (DEBUG != 0) { /* if not debugging direct shift action improve performance */ pParser.yystack_top++; pParser.yystack[pParser.yystack_top].yystate = yyaction; pParser.yystack[pParser.yystack_top].yymajor = yygoto; pParser.yystack[pParser.yystack_top].yyminor = yygotominor; } /* DEBUG */ else { yy_shift(pParser, yyaction, yygoto, yygotominor); } } else if (yyaction == YY_ACCEPT_ACTION) { yy_accept(pParser); } }
static void yy_shift(YY_PARSER pParser, int yynewState, int yymajor, YY_MINOR_TYPE yypminor) { pParser.yystack_top++; if (pParser.yystack_top >= pParser.yystack_depth) { if (DEBUG != 0) { if (yytraceWriter != null) /* trace stack overflow */ { yy_traceFile(yytraceWriter, yytracePrompt + "Stack Overflow ! Try realloc stack.\r\n"); } } /* DEBUG */ YY_STACK_ENTRY [] yystack = pParser.yystack; pParser.yystack = new YY_STACK_ENTRY[pParser.yystack_depth * 2]; /* move to new stack */ for (int i = 0; i < pParser.yystack_depth; i++) { pParser.yystack[i] = yystack[i]; } pParser.yystack_depth *= 2; } /* entry stack */ pParser.yystack[pParser.yystack_top] = new YY_STACK_ENTRY(); pParser.yystack[pParser.yystack_top].yystate = yynewState; pParser.yystack[pParser.yystack_top].yymajor = yymajor; pParser.yystack[pParser.yystack_top].yyminor = yypminor; if (DEBUG != 0) { if (yytraceWriter != null && pParser.yystack_top > 0) { int i; yy_traceFile(yytraceWriter, yytracePrompt + "Shift " + get_symbolName(yymajor) + " => State(" + yynewState + ")\r\n"); yy_traceFile(yytraceWriter, yytracePrompt + "Stack:"); for (i = 0; i <= pParser.yystack_top; i++) { yy_traceFile(yytraceWriter, " " + get_symbolName(pParser.yystack[i].yymajor)); } yy_traceFile(yytraceWriter, "\r\n"); } } /* DEBUG */ }
public static void Parse(Object yypParser, int yymajor, int yyminor) { YY_MINOR_TYPE yyminorunion = new YY_MINOR_TYPE(); YY_PARSER pParser; bool yyendofinput; int yyaction; pParser = (YY_PARSER)yypParser; /* initialize */ if (pParser.yystack_top < 0) { pParser.yystack_top = 0; pParser.yyerr_count = -1; pParser.yystack[0] = new YY_STACK_ENTRY(); pParser.yystack[0].yymajor = 0; /* '#' */ pParser.yystack[0].yystate = 0; /* state number */ } /* yyminorunion.yy_%d = yyminor; */ yyminorunion.yy_11 = yyminor; yyendofinput = (yymajor == 0); if (DEBUG != 0) { if (yytraceWriter != null) { yy_traceFile(yytraceWriter, yytracePrompt + "Input " + get_symbolName(yymajor) + "\r\n"); } } /* DEBUG */ do { yyaction = yy_find_shift_action(pParser, yymajor); if (yyaction < YY_NSTATE) { yy_shift(pParser, yyaction, yymajor, yyminorunion); pParser.yyerr_count--; if (yyendofinput == true && pParser.yystack_top >= 0) { yymajor = 0; } else { yymajor = YY_NSYMBOL; /* end of loop flag for shift after reduce action */ } } else if (yyaction < YY_NSTATE + YY_NRULE) { yy_reduce(pParser, yyaction - YY_NSTATE); /* shift nt for next loop yy_find_shift_action find lookahead(yymajor) reduce rule */ } else if (yyaction == YY_ERROR_ACTION) { if (DEBUG != 0) { if (yytraceWriter != null) { yy_traceFile(yytraceWriter, yytracePrompt + "Syntax Error!\r\n"); } } /* DEBUG */ if (pParser.yyerr_count <= 0) { yy_syntax_error(pParser, yymajor, yyminorunion); } pParser.yyerr_count = 3; /* 3 times error only show 1 time */ yy_destructor(yymajor, yyminorunion); /* drop the cause of the error token(yymajor) */ if (yyendofinput == true) { yy_parse_failed(pParser); } yymajor = YY_NSYMBOL; } else { yy_accept(pParser); yymajor = YY_NSYMBOL; } }while(yymajor != YY_NSYMBOL && pParser.yystack_top >= 0); }
/* destructor function */ public void destructor_proc(YY_MINOR_TYPE yypminor) { }