jitcraft/Parser.h
author David Anderson <dvander@alliedmods.net>
Wed Jun 27 02:21:56 2012 -0700 (2012-06-27)
changeset 4 633176823669
parent 2 46fc53b8fd2f
child 8 069d207a8f2a
permissions -rw-r--r--
Add support for float variables and basic math.
     1 /*
     2  * Copyright (C) 2012 David Anderson
     3  *
     4  * This file is part of JITCraft.
     5  *
     6  * JITCraft is free software: you can redistribute it and/or modify it under
     7  * the terms of the GNU General Public License as published by the Free
     8  * Software Foundation, either version 3 of the License, or (at your option)
     9  * any later version.
    10  * 
    11  * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
    12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    13  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License along with
    16  * JITCraft. If not, see http://www.gnu.org/licenses/.
    17  */
    18 #ifndef _include_jitcraft_parser_h_
    19 #define _include_jitcraft_parser_h_
    20 
    21 #include <stdio.h>
    22 #include <vector>
    23 #include "AST.h"
    24 #include "StringPool.h"
    25 #include "Scanner.h"
    26 #include "Scopes.h"
    27 
    28 namespace jc {
    29 
    30 class Parser
    31 {
    32     PoolAllocator &pool_;
    33     StringPool strings_;
    34     Scanner scanner_;
    35     Scope *scope_;
    36     std::vector<NameProxy *> *unbound_;
    37 
    38   private:
    39     void redeclarationError() {
    40         assert(false);
    41     }
    42     bool match(TokenKind kind);
    43     bool expect(TokenKind kind);
    44 
    45     Scope *enterScope(Scope::Kind kind);
    46 
    47     VariableDeclaration *variableDeclaration();
    48     bool matchName(Name **name, TokenKind kind = TOK_NAME);
    49     Name *expectName();
    50     NameProxy *bind(Name *name);
    51     Expression *primitive();
    52     Expression *call(Expression *callee);
    53     Expression *index(Expression *left);
    54     Expression *prefix();
    55     Expression *primary();
    56     Expression *unary();
    57     Expression *multiplication();
    58     Expression *shift();
    59     Expression *addition();
    60     Expression *relational();
    61     Expression *equals();
    62     Expression *expression();
    63 
    64     Statement *enum_();
    65     Statement *if_();
    66     Statement *block();
    67     Statement *function();
    68     Statement *expressionStatement();
    69     Statement *forStatement();
    70     Statement *localStatement();
    71     Statement *globalStatement();
    72     Statement *returnStatement();
    73 
    74   public:
    75     Parser(const char *stream, size_t length);
    76 
    77     ParseTree *parse();
    78 };
    79 
    80 }
    81 
    82 #endif // _include_jitcraft_parser_h_