summaryrefslogtreecommitdiff
path: root/src/libs/glsl/glslparser.h
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-11-11 12:01:37 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2010-11-11 12:22:58 +0100
commitca4439bcefa71fda00c7baa4f3b2dfba1c87e7dc (patch)
tree432d7837545380a79d29daa176c40236f0d130e3 /src/libs/glsl/glslparser.h
parent6a5f06d463786ad29d59943bb9ca3fbcf5bbcb8f (diff)
downloadqt-creator-ca4439bcefa71fda00c7baa4f3b2dfba1c87e7dc.tar.gz
Get rid of glsl.g.in and start working on the semantic actions.
Diffstat (limited to 'src/libs/glsl/glslparser.h')
-rw-r--r--src/libs/glsl/glslparser.h27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/libs/glsl/glslparser.h b/src/libs/glsl/glslparser.h
index f2761f2c32..518af028df 100644
--- a/src/libs/glsl/glslparser.h
+++ b/src/libs/glsl/glslparser.h
@@ -1,4 +1,6 @@
+#line 212 "./glsl.g"
+
/**************************************************************************
**
** This file is part of Qt Creator
@@ -36,26 +38,41 @@
namespace GLSL {
-class Parser: public GLSLParserTable
+class GLSL_EXPORT Parser: public GLSLParserTable
{
public:
- Parser(const char *source, unsigned size, int variant);
+ union Value {
+ void *ptr;
+ const std::string *string;
+ AST *ast;
+ List<AST *> *ast_list;
+ Declaration *declaration;
+ List<Declaration *> *declaration_list;
+ TranslationUnit *translation_unit;
+ };
+
+ Parser(Engine *engine, const char *source, unsigned size, int variant);
~Parser();
- bool parse();
+ TranslationUnit *parse();
private:
+ // 1-based
+ Value &sym(int n) { return _symStack[_tos + n - 1]; }
+ AST *&ast(int n) { return _symStack[_tos + n - 1].ast; }
+ const std::string *&string(int n) { return _symStack[_tos + n - 1].string; }
+
inline int consumeToken() { return _index++; }
inline const Token &tokenAt(int index) const { return _tokens.at(index); }
inline int tokenKind(int index) const { return _tokens.at(index).kind; }
- void dump(AST *ast);
+ void reduce(int ruleno);
private:
int _tos;
int _index;
std::vector<int> _stateStack;
std::vector<int> _locationStack;
- std::vector<AST *> _astStack;
+ std::vector<Value> _symStack;
std::vector<Token> _tokens;
};