예제 #1
0
파일: parser.c 프로젝트: kkthx/bi-pjp-sfe
void TermPrime(void)
{
   switch (Symb.type) {
   case TIMES:
      /* T' -> * F BinOp T' */
      Symb = readLexem();
      Factor();
      Gener(BinOp, '*');      /* BinOp.dop = '*' */
      TermPrime();
      break;
   case DIVIDE:
      /* T' -> / F BinOp T' */
      Symb = readLexem();
      Factor();
      Gener(BinOp, '/');      /* BinOp.dop = '/' */
      TermPrime();
      break;
   case PLUS:
   case MINUS:
   case RPAR:
   case EOI:
      /* T' -> e */
      break;
   default:
      ExpansionError("T'", Symb.type);
   }
}
예제 #2
0
파일: parser.c 프로젝트: kkthx/bi-pjp-sfe
void ExpressionPrime(void)
{
   switch (Symb.type) {
   case PLUS:
      /* E' -> + T BinOp E' */
      Symb = readLexem();
      Term();
      Gener(BinOp, '+');   /* BinOp.dop = '+' */
      ExpressionPrime();
      break;
   case MINUS:
      /* E' -> - T BinOp E' */
      Symb = readLexem();
      Term();
      Gener(BinOp, '-');   /* BinOp.dop = '-' */
      ExpressionPrime();
      break;
   case RPAR:
   case EOI:
      /* E' -> e */
      break;
   default:
      ExpansionError("E'", Symb.type);
   }
}
예제 #3
0
파일: zaspoc.cpp 프로젝트: cejkato2/MI-GEN
void GenTR(char *id)
{
   int v;
   DruhId druh = idPromKonst(id, &v);
   switch (druh) {
   case IdProm:
      Gener(TA, v);
      Gener(DR);
      break;
   case IdKonst:
      Gener(TC, v);
      break;
   }
}
예제 #4
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void Condition()
{
   Expression();
   Operator op = RelOp();
   Expression();
   Gener(BOP, op);
}
예제 #5
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void Statement()
{
   switch (Symb.type) {
   case IDENT: {
      Gener(TA, varAddr(Symb.ident));
      Symb = readLexem();
      Compare(ASSIGN, __LINE__);
      Expression();
      Gener(ST);
      break;
   }
   case kwWRITE:
      Symb = readLexem();
      Expression();
      Gener(WRT);
      break;
   case kwREAD:
      Symb = readLexem();
      char id[MAX_IDENT_LEN];
      Compare_IDENT(id, __LINE__);
      Gener(TA, varAddr(id));
      Gener(RD);
      Gener(ST);
      break;
   case kwIF: {
      Symb = readLexem();
      Condition();
      int adrIFJ = Gener(IFJ);
      Compare(kwTHEN, __LINE__);
      Statement();
      ElsePart(adrIFJ);
      break;
   }
   case kwWHILE: {
      int a1 = GetIC();
      Symb = readLexem();
      Condition();
      int aIFJ = Gener(IFJ);
      Compare(kwDO, __LINE__);
      Statement();
      Gener(JU, a1);
      PutIC(aIFJ);
      break;
   }
   case kwBEGIN:
      CompoundStatement();
      break;
   default:
      break;
   }
}
예제 #6
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void TermPrime()
{
   switch (Symb.type) {
   case TIMES:
      Symb = readLexem();
      Factor();
      Gener(BOP, Times);
      TermPrime();
      break;
   case DIVIDE:
      Symb = readLexem();
      Factor();
      Gener(BOP, Divide);
      TermPrime();
      break;
   default:
      break;
   }
}
예제 #7
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void ExpressionPrimed()
{
   switch (Symb.type) {
   case PLUS:
      Symb = readLexem();
      Term();
      Gener(BOP, Plus);
      ExpressionPrimed();
      break;
   case MINUS:
      Symb = readLexem();
      Term();
      Gener(BOP, Minus);
      ExpressionPrimed();
      break;
   default:
      break;
   }
}
예제 #8
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void Expression()
{
   if (Symb.type == MINUS) {
      Symb = readLexem();
      Term();
      Gener(UNM);
      ExpressionPrimed();
   } else {
      Term();
      ExpressionPrimed();
   }
}
예제 #9
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void ElsePart(int adrIFJ)
{
   if (Symb.type == kwELSE) {
      Symb = readLexem();
      int adrJU = Gener(JU);
      PutIC(adrIFJ);
      Statement();
      PutIC(adrJU);
   } else {
      PutIC(adrIFJ);
   }
}
예제 #10
0
파일: parser.c 프로젝트: kkthx/bi-pjp-sfe
void Factor(void)
{
   switch (Symb.type) {
   case NUMB: {
      /* F -> c IntKonst */
      int cshod = Compare_NUMB(); 
      Gener(IntConst, cshod);
      break;
   }
   case LPAR:
      /* F -> ( E ) */
      Symb = readLexem();
      Expression();
      Compare(RPAR);
      break;
   default:
      ExpansionError("F", Symb.type);
   }
}
예제 #11
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void Factor()
{
   switch (Symb.type) {
   case IDENT:
      char id[MAX_IDENT_LEN];
      Compare_IDENT(id, __LINE__);
      GenTR(id);
      break;
   case NUMB:
      int hodn;
      Compare_NUMB(&hodn, __LINE__);
      Gener(TC, hodn);
      break;
   case LPAR: {
      Symb = readLexem();
      Expression();
      Compare(RPAR, __LINE__);
      break;
   }
   default:
      ExpansionError("Factor", Symb.type, __LINE__);
   }
}
예제 #12
0
파일: parser.cpp 프로젝트: kkthx/bi-pjp-sfe
void Program()
{
   Decl();
   CompoundStatement();
   Gener(STOP);
}
예제 #13
0
파일: parser.c 프로젝트: kkthx/bi-pjp-sfe
void Start(void)
{
   /* S -> E Stop */
   Expression();
   Gener(Stop, 0);
}