#ifndef __Parser_hpp__
#define __Parser_hpp__
#include <string>
#include "Scanner.hpp"
#include "Tree.hpp"
using namespace std;
class Parser {
Scanner &m_lex;
unsigned lastpos;
string lasterr;
void serror(string);
bool Match(byte t);
void Consume();
const Token& Expect(byte t);
const Token& Next();
unsigned Precedence(const Token&);
bool MatchNumber();
private:
tree TransposeFixup(tree base);
tree ForStatement();
tree FunctionDefinition();
tree ForIndexExpression();
tree SingletonStatement();
tree DBStepOrTraceStatement();
tree WhileStatement();
tree IfStatement();
tree SwitchStatement();
tree TryStatement();
tree Expression();
tree Statement();
tree DeclarationStatement();
tree StatementSeperator();
tree Identifier();
tree AssignmentStatement();
tree VariableDereference(bool blankRefOK = true);
tree MultiFunctionCall();
tree MatDef(byte basetok, byte closebracket);
tree MatrixDefinition();
tree RowVectorDefinition();
tree SpecialFunctionCall();
tree Keyword();
tree Exp(unsigned p);
tree PrimaryExpression();
tree AnonymousFunction();
public:
Parser(Scanner& lex);
tree Process();
string LastErr() {return lasterr;}
unsigned LastPos() {return lastpos;}
tree StatementList();
void Dump();
friend tree ParseExpressionString(string);
};
tree ParseString(string arg);
tree ParseExpressionString(string arg);
#endif
syntax highlighted by Code2HTML, v. 0.9.1