X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/e53322782610fa076081d974ac22712107a2fe0e..924f67b2b1aabb11cdcbbfc00fd638c9b6bfb868:/Parser.hpp diff --git a/Parser.hpp b/Parser.hpp index 65806af..7878b0f 100644 --- a/Parser.hpp +++ b/Parser.hpp @@ -1,2 +1,104 @@ +#ifndef CYPARSER_HPP +#define CYPARSER_HPP + class CYParser { + public: + void *scanner_; + + private: + void ScannerInit(); + void ScannerDestroy(); + + public: + CYParser(); + ~CYParser(); }; + +struct CYExpression { +}; + +struct CYToken { + virtual const char *Text() const = 0; +}; + +struct CYTokenLiteral : + CYExpression, + virtual CYToken +{ +}; + +struct CYTokenString : + CYTokenLiteral +{ +}; + +struct CYTokenNumber : + CYTokenLiteral +{ +}; + +struct CYTokenWord : + virtual CYToken +{ +}; + +struct CYTokenIdentifier : + CYExpression, + CYTokenWord +{ + const char *word_; + + virtual const char *Text() const { + return word_; + } +}; + +struct CYExpressionPrefix : + CYExpression +{ + CYExpression *rhs_; + + CYExpressionPrefix(CYExpression *rhs) : + rhs_(rhs) + { + } +}; + +struct CYExpressionInfix : + CYExpression +{ + CYExpression *lhs_; + CYExpression *rhs_; + + CYExpressionInfix(CYExpression *lhs, CYExpression *rhs) : + lhs_(lhs), + rhs_(rhs) + { + } +}; + +struct CYExpressionPostfix : + CYExpression +{ + CYExpression *lhs_; + + CYExpressionPostfix(CYExpression *lhs) : + lhs_(lhs) + { + } +}; + +struct CYExpressionAssignment : + CYExpression +{ + CYExpression *lhs_; + CYExpression *rhs_; + + CYExpressionAssignment(CYExpression *lhs, CYExpression *rhs) : + lhs_(lhs), + rhs_(rhs) + { + } +}; + +#endif/*CYPARSER_HPP*/