Example #1
0
 public void Expr()
 {
     if (l.LexKind == Tok.ID || l.LexKind == Tok.INUM)
     {
         l.NextLexem();
     }
     else
     {
         SyntaxError("expression expected");
     }
 }
Example #2
0
 public void Expr()
 {
     // здесь мы проверяем на выржение
     if (l.LexKind == Tok.ID || l.LexKind == Tok.INUM)
     {
         // если число, то дальше ожидаем плюс или минус
         l.NextLexem();
         if (l.LexKind == Tok.PLUS || l.LexKind == Tok.MINUS)
         {
             l.NextLexem();
             // рекуррентно вызовем функию для того, чтобы продолжить проверку
             Expr();
         }
     }
     else
     {
         SyntaxError("expression expected");
     }
 }
Example #3
0
 public void Expr()
 {
     if (l.LexKind == Tok.ID || l.LexKind == Tok.INUM)
     {
         l.NextLexem();
         if (l.LexKind == Tok.PLUS || l.LexKind == Tok.MINUS || l.LexKind == Tok.MULT || l.LexKind == Tok.DIVISION)
         {
             l.NextLexem();
             Expr();
         }
     }
     else if (l.LexKind == Tok.LEFT_BRACKET)
     {
         l.NextLexem();
         Expr();
         if (l.LexKind == Tok.RIGHT_BRACKET)
         {
             l.NextLexem();
         }
         else
         {
             throw new LexerException("");
         }
     }
     else
     {
         SyntaxError("expression expected");
     }
 }
 private void ExprA()
 {
     if (l.LexKind == Tok.PLUS || l.LexKind == Tok.MINUS)
     {
         l.NextLexem();
         ExprT();
         ExprA();
     }
 }
 public void Assign()
 {
     l.NextLexem();  // пропуск id
     if (l.LexKind == Tok.ASSIGN)
     {
         l.NextLexem();
     }
     else
     {
         SyntaxError(":= expected");
     }
     Expr();
 }
Example #6
0
 public void For()
 {
     if (l.LexKind != Tok.FOR)
     {
         SyntaxError("FOR is absent");
     }
     l.NextLexem();
     Assign();
     if (l.LexKind != Tok.TO)
     {
         SyntaxError("TO is absent");
     }
     l.NextLexem();
     Expr();
     if (l.LexKind != Tok.DO)
     {
         SyntaxError("DO is absent");
     }
     l.NextLexem();
     if (l.LexKind == Tok.BEGIN)
     {
         Block();
     }
     else
     {
         Statement();
     }
 }
Example #7
0
 public void A()
 {
     if (l.LexKind == Tok.PLUS || l.LexKind == Tok.MINUS)
     {
         l.NextLexem();
         T();
         A();
     }
 }
 public void Expr()
 {
     // проверка на сумму или разность
     // проверка на переменную или число
     if (l.LexKind == Tok.ID || l.LexKind == Tok.INUM)
     {
         l.NextLexem();
         // проверка на плюс или минус
         if (l.LexKind == Tok.PLUS || l.LexKind == Tok.MINUS)
         {
             l.NextLexem();
             // повторный вызов для того чтобы продолжить проверку
             Expr();
         }
     }
     else
     {
         SyntaxError("expression expected");
     }
 }
        public void CheckIdNumBrackets()
        {
            // Если ID или число, берем следующую лексему
            if (l.LexKind == Tok.ID || l.LexKind == Tok.INUM)
            {
                l.NextLexem();
            }
            // Если текущая лексема левая скобка
            else if (l.LexKind == Tok.LEFT_BRACKET)
            {
                // Переходим к следующей лексеме
                l.NextLexem();
                // Находим все лексемы до правой скобки
                Expr();

                // Если нашли правую скобку,
                // то переходим к след лексеме
                // иначе ошибка
                if (l.LexKind == Tok.RIGHT_BRACKET)
                {
                    l.NextLexem();
                }
                else
                {
                    SyntaxError(") expected");
                }
            }
            else
            {
                SyntaxError("expression expected");
            }
        }