コード例 #1
0
 static void Main(string[] args)
 {
     if (args.Length > 1)
     {
         Console.WriteLine("Usage : Slan [script]");
         System.Environment.Exit(0);
     }
     else if (args.Length == 1)
     {
         Slan.runFile(args[0]);
     }
     else
     {
         Slan.runPrompt();
     }
 }
コード例 #2
0
        private void itsString()
        {
            while (peek() != '"' && !isAtEnd())
            {
                if (peek() == '\n')
                {
                    line++;
                }
                advance();
            }

            if (isAtEnd())
            {
                Slan.error(line, "Unterminated string.");
                return;
            }

            advance();

            String value = source.Substring(start + 1, (current - start) - 1);

            addToken(TokenType.STRING, value);
        }
コード例 #3
0
        private void scanToken()
        {
            char c = advance();

            switch (c)
            {
            case '(': addToken(TokenType.LEFT_PAREN); break;

            case ')': addToken(TokenType.RIGHT_PAREN); break;

            case '{': addToken(TokenType.LEFT_BRACE); break;

            case '}': addToken(TokenType.RIGHT_BRACE); break;

            case ',': addToken(TokenType.COMMA); break;

            case '.': addToken(TokenType.DOT); break;

            case '-': addToken(TokenType.MINUS); break;

            case '+': addToken(TokenType.PLUS); break;

            case ';': addToken(TokenType.SEMICOLON); break;

            case '*': addToken(TokenType.STAR); break;

            case '!': addToken(match('=') ? TokenType.BANG_EQUAL : TokenType.BANG); break;

            case '=': addToken(match('=') ? TokenType.EQUAL_EQUAL : TokenType.EQUAL); break;

            case '<': addToken(match('=') ? TokenType.LESS_EQUAL : TokenType.LESS); break;

            case '>': addToken(match('=') ? TokenType.GREATER_EQUAL : TokenType.GREATER); break;

            case '/':
                if (match('/'))
                {
                    while (peek() != '\n' && !isAtEnd())
                    {
                        advance();
                    }
                }
                else
                {
                    addToken(TokenType.SLASH);
                }
                break;

            case ' ':
            case '\r':
            case '\t':
                break;

            case '\n':
                line++;
                break;

            case '"': itsString(); break;

            case 'o': if (peek() == 'r')
                {
                    addToken(TokenType.OR);
                }
                break;


            default:
                if (isDigit(c))
                {
                    number();
                }
                else if (isAlpha(c))
                {
                    identifier();
                }
                else
                {
                    Slan.error(line, "Unexpected character.");
                }
                break;
            }
        }