dvander@0: /* dvander@0: * Copyright (C) 2012 David Anderson dvander@0: * dvander@0: * This file is part of JITCraft. dvander@0: * dvander@0: * JITCraft is free software: you can redistribute it and/or modify it under dvander@0: * the terms of the GNU General Public License as published by the Free dvander@0: * Software Foundation, either version 3 of the License, or (at your option) dvander@0: * any later version. dvander@0: * dvander@0: * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY dvander@0: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@0: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@0: * dvander@0: * You should have received a copy of the GNU General Public License along with dvander@0: * JITCraft. If not, see http://www.gnu.org/licenses/. dvander@0: */ dvander@0: #ifndef _include_jitcraft_parser_h_ dvander@0: #define _include_jitcraft_parser_h_ dvander@0: dvander@0: #include dvander@0: #include dvander@0: #include "AST.h" dvander@0: #include "StringPool.h" dvander@0: #include "Scanner.h" dvander@0: #include "Scopes.h" dvander@0: dvander@0: namespace jc { dvander@0: dvander@0: class Parser dvander@0: { dvander@0: PoolAllocator &pool_; dvander@0: StringPool strings_; dvander@0: Scanner scanner_; dvander@0: Scope *scope_; dvander@0: std::vector *unbound_; dvander@0: dvander@0: private: dvander@0: void redeclarationError() { dvander@2: assert(false); dvander@0: } dvander@0: bool match(TokenKind kind); dvander@0: bool expect(TokenKind kind); dvander@0: dvander@0: Scope *enterScope(Scope::Kind kind); dvander@0: dvander@0: VariableDeclaration *variableDeclaration(); dvander@4: bool matchName(Name **name, TokenKind kind = TOK_NAME); dvander@4: Name *expectName(); dvander@0: NameProxy *bind(Name *name); dvander@0: Expression *primitive(); dvander@0: Expression *call(Expression *callee); dvander@0: Expression *index(Expression *left); dvander@0: Expression *prefix(); dvander@0: Expression *primary(); dvander@0: Expression *unary(); dvander@0: Expression *multiplication(); dvander@8: Expression *addition(); dvander@2: Expression *shift(); dvander@8: Expression *bitand(); dvander@8: Expression *bitxor(); dvander@8: Expression *bitor(); dvander@0: Expression *relational(); dvander@0: Expression *equals(); dvander@22: Expression *assignment(); dvander@0: Expression *expression(); dvander@0: dvander@2: Statement *enum_(); dvander@0: Statement *if_(); dvander@0: Statement *block(); dvander@0: Statement *function(); dvander@0: Statement *expressionStatement(); dvander@9: Statement *while_(); dvander@9: Statement *do_(); dvander@0: Statement *forStatement(); dvander@0: Statement *localStatement(); dvander@0: Statement *globalStatement(); dvander@0: Statement *returnStatement(); dvander@0: dvander@0: public: dvander@0: Parser(const char *stream, size_t length); dvander@0: dvander@0: ParseTree *parse(); dvander@0: }; dvander@0: dvander@0: } dvander@0: dvander@0: #endif // _include_jitcraft_parser_h_