Esempio n. 1
0
 //Парсерът приема всеки знак '-' за аритметична операция, затова тук се проверява
 //дали всъщност знакът е бил унарен оператор.
 //Замяната на знака се налага заради операциите със стека на ОПЗ, да се знае дали
 //да се прилага операцията върху един или два операнда.
 private void checkUnaryMinus(LexemеSequence input, Lexemе lexeme)
 {
     if (lexeme.id == Lexemе.MINUS)
     {
         bool unary_sign = false;
         if (input.GetPosition() > 1)
         {
             char symbol = input.getLexemе(input.GetPosition() - 2).id;
             if ((symbol == Lexemе.ASSIGNMENT) ||
                 (symbol == Lexemе.OPEN_BRACE) ||
                 (symbol == Lexemе.SEMICOLON) ||
                 (symbol == Lexemе.BITWISE_AND) ||
                 (symbol == Lexemе.BITWISE_OR) ||
                 (symbol == Lexemе.PLUS) ||
                 (symbol == Lexemе.MINUS) ||
                 (symbol == Lexemе.MULTUPLICATION) ||
                 (symbol == Lexemе.DIVISION) ||
                 (symbol == Lexemе.MODUL) ||
                 (symbol == Lexemе.BITWISE_INVERSION) ||
                 (symbol == Lexemе.BOOLEAN_INVERSION))
             {
                 unary_sign = true;
             }
         }
         else
         {
             unary_sign = true;
         }
         if (unary_sign)
         {
             lexeme.id = Lexemе.UNARY_MINUS;
         }
     }
 }
Esempio n. 2
0
 private void changeSymbol(LexemеSequence input, Lexemе lexeme, char search_symbol,
                           char replace_symbol)
 {
     if (lexeme.id == search_symbol)
     {
         //проверка дали предходната лексема е идентификатор
         if (input.GetPosition() > 1)
         {
             if (input.getLexemе(input.GetPosition() - 2).id == Lexemе.IDENTIFIER)
             {
                 lexeme.id = replace_symbol;
                 return;
             }
         }
         //проверка дали следващата лексема е идентификатор
         if (input.GetPosition() < input.size())
         {
             char symb = input.peekLexemе().id;
             if (input.peekLexemе().id == Lexemе.IDENTIFIER)
             {
                 return;
             }
             else
             {
                 throw new TranslatorException("Error 1: Expression " + search_symbol +
                                               " can be applyed only to identifier.");
             }
         }
         throw new TranslatorException("Error 2: Expression " + search_symbol +
                                       " can be applyed only to identifier.");
     }
 }