rendered paste body#include <stdio.h>#include <stdlib.h>#include "minako.h"yystype yylval;int functiondefintion(int token);void type(int token);void statementlist(int token);void block(int token);int lookahead, akToken;void nextToken(){ akToken = lookahead; lookahead = yylex();}void delToken(int token){ if (akToken == token) nextToken(); else { fprintf(stderr, "ERROR: Token %i erwartet, aber %i eingelesen\n", token, akToken); exit(-1); }}void parseError(char *function, int line, int token){ fprintf(stderr, "ERROR: Funktion %s, Zeile %i, Token %i \n", function, line, token); exit(-1);}/*Beginn main*/int main(int argc, char ** argv) { if (argc == 1) { yyin = stdin; printf("Lese von stdin\n"); } else { yyin = fopen(argv[1], "r"); if (yyin==NULL) { fprintf(stderr, "ERROR: %s existiert nicht!\n", argv[1]); return(-1); } } lookahead = yylex(); nextToken(); while (akToken != EOF) { if (functiondefintion(akToken) == 0) {} else parseError("main", yylineno, akToken); } fclose(yyin); return(0);}/*Beginn der Grammatik*/int functiondefintion(int token){ type(token); delToken(ID); delToken(40); delToken(41); if (akToken == 123) delToken(123); else if (akToken == KW_BEGIN) delToken(KW_BEGIN); else parseError("functiondefintion", yylineno, akToken); statementlist(akToken); if (akToken == 125) delToken(125); else if (akToken == KW_END) delToken(KW_END); else parseError("functiondefintion", yylineno, akToken); return(0);}void type(int token){ if ((token == KW_BOOLEAN) || (token == KW_FLOAT) || (token == KW_INT) || (token == KW_VOID)) { delToken(token); } else parseError("type", yylineno, akToken);}void statementlist(int token){ if (token == block(token);}void block(int token){ if (token == 123) delToken(123); else if (token == KW_BEGIN) delToken(KW_BEGIN); else parseError("block", yylineno, token); statementlist(akToken); if (akToken == 125) delToken(125); else if (akToken == KW_END) delToken(KW_END); else parseError("block", yylineno, akToken); /*oder STATEMENT */}