Beispiel #1
0
 /// <summary>
 /// Lexem was found, create token
 /// </summary>
 private void processCurrent()
 {
     if (current == "")
     {
         return;
     }
     else
     {
         int code;
         if (SyntaxTable.containsPoint(current) == -1)
         {
             error(i);
         }
         if (current == ".")
         {
             token.addToken(1, SyntaxTable.isOperation(current));
             current = "";
             return;
         }
         if (SyntaxTable.isNumber(current))
         {
             if (SyntaxTable.containsPoint(current) == 1)
             {
                 code = table.newIdentifier(current);
                 token.addToken(4, code);
                 current = "";
                 return;
             }
             else
             {
                 code = table.newIdentifier(current);
                 token.addToken(5, code);
                 current = "";
                 return;
             }
         }
         code = SyntaxTable.isOperation(current);
         if (code > -1)
         {
             token.addToken(1, code);
             current = "";
             return;
         }
         code = SyntaxTable.isKeyword(current);
         if (code > -1)
         {
             token.addToken(2, code);
             current = "";
             return;
         }
         else
         {
             code = table.newIdentifier(current);
             token.addToken(3, code);
             current = "";
             return;
         }
     }
 }
Beispiel #2
0
        public string tokenStringBuilder(int type, int value)
        {
            switch (type)
            {
            case 1: return("operator:" + SyntaxTable.operation(value));

            case 2: return("keyword:" + SyntaxTable.keyword(value));

            case 3: return("identifier:" + table.identifier(value));

            case 4: return("floatconstant:" + table.identifier(value));

            case 5: return("intconstant:" + table.identifier(value));

            default: return("Something went wrong");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Analyzes code and creates token and identifier tables
        /// </summary>
        /// <param name="path">file to analize</param>
        public TokenTable analyze(String path, out IdentifiersTable ident)
        {
            text = File.ReadAllText(path);
            // analyzing by each character
            for (i = 0; i < text.Length; i++)
            {
                next = Convert.ToString(text[i]);
                // space symbol behavior
                if (SyntaxTable.isSpaceSymbol(next))
                {
                    processCurrent();
                    continue;
                }

                // number check
                if (SyntaxTable.isNumber(current))
                {
                    if (SyntaxTable.isNumber(current + next))
                    {
                        current += next;
                        continue;
                    }
                    else
                    {
                        processCurrent();
                        current = next;
                        continue;
                    }
                }

                // operator behavior
                if (SyntaxTable.isOperation(next) > -1)
                {
                    // complex operation behavior
                    if (!SyntaxTable.isOperationAllowed(current + next))
                    {
                        processCurrent();
                        current = next;
                        continue;
                    }
                    else
                    {
                        current += next;
                        continue;
                    }
                }
                // check if symbol is valid
                if (!SyntaxTable.isSymbolAllowed(Convert.ToChar(next)))
                {
                    error(i);
                    ident = null;
                    return(null);
                }

                // check for preceding operator
                if (current.Length == 1 &&
                    (SyntaxTable.isOperation(Convert.ToString(current[0])) > -1))
                {
                    processCurrent();
                    current = next;
                    continue;
                }
                current += next;
            }
            if (current != "")
            {
                processCurrent();
            }
            ident = table;
            Console.WriteLine("Lexical analysis complete.");
            return(token);
        }