コード例 #1
0
        public static List <Token> Lex(string text)
        {
            Init();
            var lexer = new LexerMachine();

            foreach (char c in text)
            {
                if ((c == '_') || (Char.IsLetter(c)))
                {
                    lexer.Letter(c);
                }
                else
                {
                    if (Char.IsDigit(c))
                    {
                        lexer.Digit(c);
                    }
                    else
                    {
                        if (IsOperator(c))
                        {
                            lexer.Operator(c);
                        }
                        else
                        {
                            lexer.Whitespace(' ');
                        }
                    }
                }
            }
            lexer.Whitespace(' ');
            return(lexer.Tokens);
        }
コード例 #2
0
        public static List <Token> LexWeak(string text)
        {
            // item 475
            Init();
            var lexer = new LexerMachine();

            foreach (char c in text)
            {
                // item 480
                if ((c == '_') || (Char.IsLetter(c)))
                {
                    // item 488
                    lexer.OnMessage(
                        LexerMachine.LetterMessage,
                        c
                        );
                }
                else
                {
                    // item 485
                    if (Char.IsDigit(c))
                    {
                        // item 495
                        lexer.OnMessage(
                            LexerMachine.DigitMessage,
                            c
                            );
                    }
                    else
                    {
                        // item 490
                        if (IsOperator(c))
                        {
                            // item 496
                            lexer.OnMessage(
                                LexerMachine.OperatorMessage,
                                c
                                );
                        }
                        else
                        {
                            // item 497
                            lexer.OnMessage(
                                LexerMachine.WhitespaceMessage,
                                ' '
                                );
                        }
                    }
                }
            }
            // item 498
            lexer.OnMessage(
                LexerMachine.WhitespaceMessage,
                ' '
                );
            // item 478
            return(lexer.Tokens);
        }
コード例 #3
0
 private static void CreateToken(LexerMachine lexer, TokenType type)
 {
     if (lexer.Buffer.Length == 0)
     {
     }
     else
     {
         string text = lexer.Buffer.ToString();
         lexer.Buffer.Length = 0;
         Token token = new Token(text, type);
         lexer.Tokens.Add(token);
     }
 }
コード例 #4
0
        private static bool TryMakeLongOperator(LexerMachine lexer, char c)
        {
            char previous = lexer.Buffer[0];

            char[] chars = { previous, c };
            string text  = new String(chars);

            if (LongOperators.Contains(text))
            {
                lexer.Buffer.Length = 0;
                Token token = new Token(text, TokenType.Operator);
                lexer.Tokens.Add(token);
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #5
0
        public static List <Token> Lex(string text)
        {
            // item 310
            Init();
            var lexer = new LexerMachine();

            foreach (char c in text)
            {
                // item 315
                if ((c == '_') || (Char.IsLetter(c)))
                {
                    // item 323
                    lexer.Letter(c);
                }
                else
                {
                    // item 320
                    if (Char.IsDigit(c))
                    {
                        // item 324
                        lexer.Digit(c);
                    }
                    else
                    {
                        // item 325
                        if (IsOperator(c))
                        {
                            // item 328
                            lexer.Operator(c);
                        }
                        else
                        {
                            // item 329
                            lexer.Whitespace(' ');
                        }
                    }
                }
            }
            // item 314
            lexer.Whitespace(' ');
            // item 313
            return(lexer.Tokens);
        }
コード例 #6
0
 public static List<Token> Lex(string text) {
     IEnumerator<char> _it311 = null;
     char c = default(char);
     // item 310
     Init();
     var lexer = new LexerMachine();
     // item 3110001
     _it311 = ((IEnumerable<char>)text).GetEnumerator();
     while (true) {
         // item 3110002
         if (_it311.MoveNext()) {
             
         } else {
             break;
         }
         // item 3110004
         c = _it311.Current;
         // item 315
         if (c == '_') {
             // item 323
             lexer.Letter(c);
         } else {
             // item 318
             if (Char.IsLetter(c)) {
                 // item 323
                 lexer.Letter(c);
             } else {
                 // item 320
                 if (Char.IsDigit(c)) {
                     // item 324
                     lexer.Digit(c);
                 } else {
                     // item 325
                     if (IsOperator(c)) {
                         // item 328
                         lexer.Operator(c);
                     } else {
                         // item 329
                         lexer.Whitespace(' ');
                     }
                 }
             }
         }
     }
     // item 314
     lexer.Whitespace(' ');
     // item 313
     return lexer.Tokens;
 }
コード例 #7
0
        public static List <Token> Lex(string text)
        {
            IEnumerator <char> _it311 = null;
            char c = default(char);

            // item 310
            Init();
            var lexer = new LexerMachine();

            // item 3110001
            _it311 = ((IEnumerable <char>)text).GetEnumerator();
            while (true)
            {
                // item 3110002
                if (_it311.MoveNext())
                {
                }
                else
                {
                    break;
                }
                // item 3110004
                c = _it311.Current;
                // item 315
                if (c == '_')
                {
                    // item 323
                    lexer.Letter(c);
                }
                else
                {
                    // item 318
                    if (Char.IsLetter(c))
                    {
                        // item 323
                        lexer.Letter(c);
                    }
                    else
                    {
                        // item 320
                        if (Char.IsDigit(c))
                        {
                            // item 324
                            lexer.Digit(c);
                        }
                        else
                        {
                            // item 325
                            if (IsOperator(c))
                            {
                                // item 328
                                lexer.Operator(c);
                            }
                            else
                            {
                                // item 329
                                lexer.Whitespace(' ');
                            }
                        }
                    }
                }
            }
            // item 314
            lexer.Whitespace(' ');
            // item 313
            return(lexer.Tokens);
        }
コード例 #8
0
 private static void CreateOperator(LexerMachine lexer)
 {
     CreateToken(lexer, TokenType.Operator);
 }
コード例 #9
0
 private static void CreateNumber(LexerMachine lexer)
 {
     CreateToken(lexer, TokenType.Number);
 }
コード例 #10
0
 private static void CreateIdentifier(LexerMachine lexer)
 {
     CreateToken(lexer, TokenType.Identifier);
 }
コード例 #11
0
 private static void AddChar(LexerMachine lexer, char c)
 {
     lexer.Buffer.Append(c);
 }
コード例 #12
0
 public Lexer()
 {
     Machine = new LexerMachine();
 }