diff options
Diffstat (limited to 'util/qlalr/examples/glsl')
-rw-r--r-- | util/qlalr/examples/glsl/build.sh | 47 | ||||
-rwxr-xr-x | util/qlalr/examples/glsl/glsl | 4 | ||||
-rw-r--r-- | util/qlalr/examples/glsl/glsl-lex.l | 245 | ||||
-rw-r--r-- | util/qlalr/examples/glsl/glsl.g | 671 | ||||
-rw-r--r-- | util/qlalr/examples/glsl/glsl.pro | 4 |
5 files changed, 0 insertions, 971 deletions
diff --git a/util/qlalr/examples/glsl/build.sh b/util/qlalr/examples/glsl/build.sh deleted file mode 100644 index 122431ba4e..0000000000 --- a/util/qlalr/examples/glsl/build.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -############################################################################# -## -## Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -## Contact: http://www.qt-project.org/legal -## -## This file is the build configuration utility of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:LGPL$ -## Commercial License Usage -## Licensees holding valid commercial Qt licenses may use this file in -## accordance with the commercial license agreement provided with the -## Software or, alternatively, in accordance with the terms contained in -## a written agreement between you and Digia. For licensing terms and -## conditions see http://qt.digia.com/licensing. For further information -## use the contact form at http://qt.digia.com/contact-us. -## -## GNU Lesser General Public License Usage -## Alternatively, this file may be used under the terms of the GNU Lesser -## General Public License version 2.1 as published by the Free Software -## Foundation and appearing in the file LICENSE.LGPL included in the -## packaging of this file. Please review the following information to -## ensure the GNU Lesser General Public License version 2.1 requirements -## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -## -## In addition, as a special exception, Digia gives you certain additional -## rights. These rights are described in the Digia Qt LGPL Exception -## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -## -## GNU General Public License Usage -## Alternatively, this file may be used under the terms of the GNU -## General Public License version 3.0 as published by the Free Software -## Foundation and appearing in the file LICENSE.GPL included in the -## packaging of this file. Please review the following information to -## ensure the GNU General Public License version 3.0 requirements will be -## met: http://www.gnu.org/copyleft/gpl.html. -## -## -## $QT_END_LICENSE$ -## -############################################################################# - -${FLEX-flex} -oglsl-lex.incl glsl-lex.l -${QLALR-qlalr} glsl.g - -qmake -make diff --git a/util/qlalr/examples/glsl/glsl b/util/qlalr/examples/glsl/glsl deleted file mode 100755 index c19018f985..0000000000 --- a/util/qlalr/examples/glsl/glsl +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -me=$(dirname $0) -${CPP-cpp} -nostdinc $* | $me/glsl.bin diff --git a/util/qlalr/examples/glsl/glsl-lex.l b/util/qlalr/examples/glsl/glsl-lex.l deleted file mode 100644 index 16ff333b79..0000000000 --- a/util/qlalr/examples/glsl/glsl-lex.l +++ /dev/null @@ -1,245 +0,0 @@ - -%{ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QLALR tool of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <cassert> -#define YY_DECL int GLSLParser::nextToken() -%} - -%option noyywrap - -hex [0-9a-fA-F] -dec [1-9][0-9]* -oct [0-7] -digit [0-9] - -fract {digit}*\.{digit}+|{digit}+\. -exp [eE][+-]?{digit}+ - -hexfract {hex}*\.{hex}+|{hex}+\. -binexp [pP][+-]?{digit}+ - -icst ({dec}|0{oct}*|0[xX]{hex}+) - -%% - -[\n] { ++context.line; } -[ \t\r]+ { /* skip */ } - -"+=" { return ADD_ASSIGN; } -"&" { return AMPERSAND; } -"&=" { return AND_ASSIGN; } -"&&" { return AND_OP; } -"attribute" { return ATTRIBUTE; } -"!" { return BANG; } -"bool" { return BOOL; } -"true" { return BOOLCONSTANT; } -"false" { return BOOLCONSTANT; } -"break" { return BREAK; } -"bvec2" { return BVEC2; } -"bvec3" { return BVEC3; } -"bvec4" { return BVEC4; } -":" { return COLON; } -"," { return COMMA; } -"const" { return CONST; } -"continue" { return CONTINUE; } -"-" { return DASH; } -"--" { return DEC_OP; } -"discard" { return DISCARD; } -"/=" { return DIV_ASSIGN; } -"do" { return DO; } -"." { return DOT; } -"else" { return ELSE; } -"=" { return EQUAL; } -"==" { return EQ_OP; } -"float" { return FLOAT; } -"for" { return FOR; } -">=" { return GE_OP; } -"if" { return IF; } -"in" { return IN; } -"++" { return INC_OP; } -"inout" { return INOUT; } -"int" { return INT; } -"ivec2" { return IVEC2; } -"ivec3" { return IVEC3; } -"ivec4" { return IVEC4; } -"<" { return LEFT_ANGLE; } -"<<=" { return LEFT_ASSIGN; } -"{" { return LEFT_BRACE; } -"[" { return LEFT_BRACKET; } -"<<" { return LEFT_OP; } -"(" { return LEFT_PAREN; } -"<=" { return LE_OP; } -"mat2" { return MAT2; } -"mat3" { return MAT3; } -"mat4" { return MAT4; } -"%=" { return MOD_ASSIGN; } -"*=" { return MUL_ASSIGN; } -"!=" { return NE_OP; } -"|=" { return OR_ASSIGN; } -"||" { return OR_OP; } -"out" { return OUT; } -"%" { return PERCENT; } -"+" { return PLUS; } -"?" { return QUESTION; } -"return" { return RETURN; } -">" { return RIGHT_ANGLE; } -">>=" { return RIGHT_ASSIGN; } -"}" { return RIGHT_BRACE; } -"]" { return RIGHT_BRACKET; } -">>" { return RIGHT_OP; } -")" { return RIGHT_PAREN; } -"sampler1D" { return SAMPLER1D; } -"sampler1DShadow" { return SAMPLER1DSHADOW; } -"sampler2D" { return SAMPLER2D; } -"sampler2DShadow" { return SAMPLER2DSHADOW; } -"sampler3D" { return SAMPLER3D; } -"samplerCube" { return SAMPLERCUBE; } -";" { return SEMICOLON; } -"/" { return SLASH; } -"*" { return STAR; } -"struct" { return STRUCT; } -"-=" { return SUB_ASSIGN; } -"~" { return TILDE; } -"uniform" { return UNIFORM; } -"varying" { return VARYING; } -"vec2" { return VEC2; } -"vec3" { return VEC3; } -"vec4" { return VEC4; } -"|" { return VERTICAL_BAR; } -"void" { return VOID; } -"while" { return WHILE; } -"^=" { return XOR_ASSIGN; } -"^" { return XOR_OP; } -"highp" { return HIGH_PRECISION; } -"mediump" { return MEDIUM_PRECISION; } -"lowp" { return LOW_PRECISION; } - -#[ \t]+[0-9]+.* { - char *eptr = 0; - context.line = (int) strtod(&yytext[1], &eptr); - QString fn = QString::fromUtf8(eptr).trimmed(); - if (fn.length() > 2) - context.fileName = fn.mid(1, fn.length()-2); -} - -#.* { - /* skip */ -} - -[_a-zA-Z][_a-zA-Z0-9]* { - yylval.s = intern (yytext); - - if (isTypename (yylval.s)) - return TYPE_NAME; - - return IDENTIFIER; -} - -{icst} { - yylval.i = (int) strtol (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}[uU] { - yylval.u = (unsigned) strtoul (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}[uU][lL] { - yylval.ul = strtoul (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}[lL][uU] { - yylval.ul = strtoul (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}[lL] { - yylval.l = strtol (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}[uU](ll|LL) { - yylval.l = strtoull (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}(ll|LL) { - yylval.l = strtoll (yytext, 0, 0); - return INTCONSTANT; -} - -{icst}(ll|LL)[uU] { - yylval.l = strtoull (yytext, 0, 0); - return INTCONSTANT; -} - -{fract}{exp}?[flFL]? { - yylval.f = strtof (yytext, 0); - return FLOATCONSTANT; -} - -{digit}+{exp}[flFL]? { - yylval.f = strtof (yytext, 0); - return FLOATCONSTANT; -} - -0[xX]{hexfract}{binexp}[flFL]? { - yylval.f = strtof (yytext, 0); - return FLOATCONSTANT; -} - -0[xX]{hex}+{binexp}[flFL]? { - yylval.f = strtof (yytext, 0); - return FLOATCONSTANT; -} - -. { - fprintf (stderr, "invalid char: %d\n", yytext [0]); - return ERROR; -} - - -%% - diff --git a/util/qlalr/examples/glsl/glsl.g b/util/qlalr/examples/glsl/glsl.g deleted file mode 100644 index 64b1b0b1e5..0000000000 --- a/util/qlalr/examples/glsl/glsl.g +++ /dev/null @@ -1,671 +0,0 @@ ----------------------------------------------------------------------------- --- --- Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). --- Contact: http://www.qt-project.org/legal --- --- This file is part of the QtCore module of the Qt Toolkit. --- --- $QT_BEGIN_LICENSE:LGPL$ --- Commercial License Usage --- Licensees holding valid commercial Qt licenses may use this file in --- accordance with the commercial license agreement provided with the --- Software or, alternatively, in accordance with the terms contained in --- a written agreement between you and Digia. For licensing terms and --- conditions see http://qt.digia.com/licensing. For further information --- use the contact form at http://qt.digia.com/contact-us. --- --- GNU Lesser General Public License Usage --- Alternatively, this file may be used under the terms of the GNU Lesser --- General Public License version 2.1 as published by the Free Software --- Foundation and appearing in the file LICENSE.LGPL included in the --- packaging of this file. Please review the following information to --- ensure the GNU Lesser General Public License version 2.1 requirements --- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. --- --- In addition, as a special exception, Digia gives you certain additional --- rights. These rights are described in the Digia Qt LGPL Exception --- version 1.1, included in the file LGPL_EXCEPTION.txt in this package. --- --- GNU General Public License Usage --- Alternatively, this file may be used under the terms of the GNU --- General Public License version 3.0 as published by the Free Software --- Foundation and appearing in the file LICENSE.GPL included in the --- packaging of this file. Please review the following information to --- ensure the GNU General Public License version 3.0 requirements will be --- met: http://www.gnu.org/copyleft/gpl.html. --- --- --- $QT_END_LICENSE$ --- ----------------------------------------------------------------------------- - -%parser GLSLParserTable -%merged_output glsl.cpp - -%token ADD_ASSIGN -%token AMPERSAND -%token AND_ASSIGN -%token AND_OP -%token ATTRIBUTE -%token BANG -%token BOOL -%token BOOLCONSTANT -%token BREAK -%token BVEC2 -%token BVEC3 -%token BVEC4 -%token CARET -%token COLON -%token COMMA -%token CONST -%token CONTINUE -%token DASH -%token DEC_OP -%token DISCARD -%token DIV_ASSIGN -%token DO -%token DOT -%token ELSE -%token EQUAL -%token EQ_OP -%token FLOAT -%token FLOATCONSTANT -%token FOR -%token GE_OP -%token IDENTIFIER -%token IF -%token IN -%token INC_OP -%token INOUT -%token INT -%token INTCONSTANT -%token IVEC2 -%token IVEC3 -%token IVEC4 -%token LEFT_ANGLE -%token LEFT_ASSIGN -%token LEFT_BRACE -%token LEFT_BRACKET -%token LEFT_OP -%token LEFT_PAREN -%token LE_OP -%token MAT2 -%token MAT3 -%token MAT4 -%token MOD_ASSIGN -%token MUL_ASSIGN -%token NE_OP -%token OR_ASSIGN -%token OR_OP -%token OUT -%token PERCENT -%token PLUS -%token QUESTION -%token RETURN -%token RIGHT_ANGLE -%token RIGHT_ASSIGN -%token RIGHT_BRACE -%token RIGHT_BRACKET -%token RIGHT_OP -%token RIGHT_PAREN -%token SAMPLER1D -%token SAMPLER1DSHADOW -%token SAMPLER2D -%token SAMPLER2DSHADOW -%token SAMPLER3D -%token SAMPLERCUBE -%token SEMICOLON -%token SLASH -%token STAR -%token STRUCT -%token SUB_ASSIGN -%token TILDE -%token TYPE_NAME -%token UNIFORM -%token VARYING -%token VEC2 -%token VEC3 -%token VEC4 -%token VERTICAL_BAR -%token VOID -%token WHILE -%token XOR_ASSIGN -%token XOR_OP -%token ERROR -%token HIGH_PRECISION -%token MEDIUM_PRECISION -%token LOW_PRECISION -%start translation_unit - - -/: - -#include <QtCore> - -class GLSLParser: protected $table -{ -public: - union Value { - int i; - unsigned u; - unsigned long ul; - unsigned long long ull; - long l; - double d; - float f; - const QString *s; - // ### more... - }; - -public: - GLSLParser(); - ~GLSLParser(); - - bool parse(); - -protected: - inline void reallocateStack(); - - inline Value &sym(int index) - { return sym_stack [tos + index - 1]; } - - int nextToken(); - - bool isTypename(const QString *s) const - { - return types.contains(s); - } - - inline const QString *intern(const QString &s) - { return &*string_repository.insert(s); } - -protected: - int tos; - int stack_size; - Value *sym_stack; - int *state_stack; - Value yylval; - QSet<QString> string_repository; - QSet<const QString*> types; - - struct /*Context*/ { - int line; - const QString *function_name; - QString fileName; - - void init() - { - line = 1; - function_name = 0; - fileName.clear(); - } - } context; -}; - -inline void GLSLParser::reallocateStack() -{ - if (! stack_size) - stack_size = 128; - else - stack_size <<= 1; - - sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value))); - state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int))); -} - -:/ - - -/. - -GLSLParser::GLSLParser(): - tos(0), - stack_size(0), - sym_stack(0), - state_stack(0) -{ -} - -GLSLParser::~GLSLParser() -{ - if (stack_size) { - free(sym_stack); - free(state_stack); - } -} - -bool GLSLParser::parse() -{ - const int INITIAL_STATE = 0; - - int yytoken = -1; - - reallocateStack(); - - context.init(); - tos = 0; - state_stack[++tos] = INITIAL_STATE; - - while (true) - { - if (yytoken == -1 && - TERMINAL_COUNT != action_index [state_stack [tos]]) - yytoken = nextToken(); - - int act = t_action (state_stack [tos], yytoken); - - if (act == ACCEPT_STATE) { - return true; - } - - else if (act > 0) - { - if (++tos == stack_size) - reallocateStack(); - - sym_stack [tos] = yylval; - state_stack [tos] = act; - yytoken = -1; - } - - else if (act < 0) - { - int r = - act - 1; - - int ridx = rule_index [r]; - printf ("*** reduce using rule %d %s ::=", r + 1, spell[rule_info [ridx]]); - ++ridx; - for (int i = ridx; i < ridx + rhs [r]; ++i) - { - int symbol = rule_info [i]; - if (const char *name = spell [symbol]) - printf (" %s", name); - else - printf (" #%d", symbol); - } - printf ("\n"); - - tos -= rhs [r]; - act = state_stack [tos++]; - - switch (r) { -./ - - -translation_unit ::= external_declaration ; -translation_unit ::= translation_unit external_declaration ; - -variable_identifier ::= IDENTIFIER ; - -primary_expression ::= variable_identifier ; -primary_expression ::= INTCONSTANT ; -primary_expression ::= FLOATCONSTANT ; -primary_expression ::= BOOLCONSTANT ; -primary_expression ::= LEFT_PAREN expression RIGHT_PAREN ; - - -postfix_expression ::= primary_expression ; -postfix_expression ::= postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET ; -postfix_expression ::= function_call ; -postfix_expression ::= postfix_expression DOT IDENTIFIER ; -postfix_expression ::= postfix_expression DOT TYPE_NAME ; -postfix_expression ::= postfix_expression INC_OP ; -postfix_expression ::= postfix_expression DEC_OP ; - - -integer_expression ::= expression ; - -function_call ::= function_call_generic ; - -function_call_generic ::= function_call_header_with_parameters RIGHT_PAREN ; -function_call_generic ::= function_call_header_no_parameters RIGHT_PAREN ; - -function_call_header_no_parameters ::= function_call_header VOID ; -function_call_header_no_parameters ::= function_call_header ; - - -function_call_header_with_parameters ::= function_call_header assignment_expression ; -function_call_header_with_parameters ::= function_call_header_with_parameters COMMA assignment_expression ; - -function_call_header ::= function_identifier LEFT_PAREN ; - -function_identifier ::= constructor_identifier ; -function_identifier ::= IDENTIFIER ; - - -constructor_identifier ::= FLOAT ; -constructor_identifier ::= INT ; -constructor_identifier ::= BOOL ; -constructor_identifier ::= VEC2 ; -constructor_identifier ::= VEC3 ; -constructor_identifier ::= VEC4 ; -constructor_identifier ::= BVEC2 ; -constructor_identifier ::= BVEC3 ; -constructor_identifier ::= BVEC4 ; -constructor_identifier ::= IVEC2 ; -constructor_identifier ::= IVEC3 ; -constructor_identifier ::= IVEC4 ; -constructor_identifier ::= MAT2 ; -constructor_identifier ::= MAT3 ; -constructor_identifier ::= MAT4 ; -constructor_identifier ::= TYPE_NAME ; - -unary_expression ::= postfix_expression ; -unary_expression ::= INC_OP unary_expression ; -unary_expression ::= DEC_OP unary_expression ; -unary_expression ::= unary_operator unary_expression ; - --- Grammar Note: No traditional style type casts. - -unary_operator ::= PLUS ; -unary_operator ::= DASH ; -unary_operator ::= BANG ; -unary_operator ::= TILDE ; -- reserved - --- Grammar Note: No '*' or '&' unary ops. Pointers are not supported. - -multiplicative_expression ::= unary_expression ; -multiplicative_expression ::= multiplicative_expression STAR unary_expression ; -multiplicative_expression ::= multiplicative_expression SLASH unary_expression ; -multiplicative_expression ::= multiplicative_expression PERCENT unary_expression ; -- reserved - - -additive_expression ::= multiplicative_expression ; -additive_expression ::= additive_expression PLUS multiplicative_expression ; -additive_expression ::= additive_expression DASH multiplicative_expression ; - -shift_expression ::= additive_expression ; -shift_expression ::= shift_expression LEFT_OP additive_expression ; -- reserved -shift_expression ::= shift_expression RIGHT_OP additive_expression ; -- reserved - -relational_expression ::= shift_expression ; -relational_expression ::= relational_expression LEFT_ANGLE shift_expression ; -relational_expression ::= relational_expression RIGHT_ANGLE shift_expression ; -relational_expression ::= relational_expression LE_OP shift_expression ; -relational_expression ::= relational_expression GE_OP shift_expression ; - -equality_expression ::= relational_expression ; -equality_expression ::= equality_expression EQ_OP relational_expression ; -equality_expression ::= equality_expression NE_OP relational_expression ; - -and_expression ::= equality_expression ; -and_expression ::= and_expression AMPERSAND equality_expression ; -- reserved - -exclusive_or_expression ::= and_expression ; -exclusive_or_expression ::= exclusive_or_expression CARET and_expression ; -- reserved - -inclusive_or_expression ::= exclusive_or_expression ; -inclusive_or_expression ::= inclusive_or_expression VERTICAL_BAR exclusive_or_expression ; -- reserved - -logical_and_expression ::= inclusive_or_expression ; -logical_and_expression ::= logical_and_expression AND_OP inclusive_or_expression ; - -logical_xor_expression ::= logical_and_expression ; -logical_xor_expression ::= logical_xor_expression XOR_OP logical_and_expression ; - -logical_or_expression ::= logical_xor_expression ; -logical_or_expression ::= logical_or_expression OR_OP logical_xor_expression ; - -conditional_expression ::= logical_or_expression ; -conditional_expression ::= logical_or_expression QUESTION expression COLON conditional_expression ; - -assignment_expression ::= conditional_expression ; -assignment_expression ::= unary_expression assignment_operator assignment_expression ; - -assignment_operator ::= EQUAL ; -assignment_operator ::= MUL_ASSIGN ; -assignment_operator ::= DIV_ASSIGN ; -assignment_operator ::= MOD_ASSIGN ; -- reserved -assignment_operator ::= ADD_ASSIGN ; -assignment_operator ::= SUB_ASSIGN ; -assignment_operator ::= LEFT_ASSIGN ; -- reserved -assignment_operator ::= RIGHT_ASSIGN ; -- reserved -assignment_operator ::= AND_ASSIGN ; -- reserved -assignment_operator ::= XOR_ASSIGN ; -- reserved -assignment_operator ::= OR_ASSIGN ; -- reserved - -expression ::= assignment_expression ; -expression ::= expression COMMA assignment_expression ; - -constant_expression ::= conditional_expression ; - -declaration ::= function_prototype SEMICOLON ; -declaration ::= init_declarator_list SEMICOLON ; - -function_prototype ::= function_declarator RIGHT_PAREN ; - -function_declarator ::= function_header ; -function_declarator ::= function_header_with_parameters ; - -function_header_with_parameters ::= function_header parameter_declaration ; -function_header_with_parameters ::= function_header_with_parameters COMMA parameter_declaration ; - -function_header ::= fully_specified_type IDENTIFIER LEFT_PAREN ; -/. -case $rule_number: { - context.function_name = sym(2).s; -} break; -./ - -parameter_declarator ::= type_specifier IDENTIFIER ; -parameter_declarator ::= type_specifier IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET ; - -parameter_declaration ::= type_qualifier parameter_qualifier parameter_declarator ; -parameter_declaration ::= parameter_qualifier parameter_declarator ; -parameter_declaration ::= type_qualifier parameter_qualifier parameter_type_specifier ; -parameter_declaration ::= parameter_qualifier parameter_type_specifier ; - -parameter_qualifier ::= ; -parameter_qualifier ::= IN ; -parameter_qualifier ::= OUT ; -parameter_qualifier ::= INOUT ; - -parameter_type_specifier ::= type_specifier ; -parameter_type_specifier ::= type_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET ; - -init_declarator_list ::= single_declaration ; -init_declarator_list ::= init_declarator_list COMMA IDENTIFIER ; -init_declarator_list ::= init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET ; -init_declarator_list ::= init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression ; -init_declarator_list ::= RIGHT_BRACKET ; -init_declarator_list ::= init_declarator_list COMMA IDENTIFIER EQUAL initializer ; - -single_declaration ::= fully_specified_type ; -single_declaration ::= fully_specified_type IDENTIFIER ; -single_declaration ::= fully_specified_type IDENTIFIER LEFT_BRACKET RIGHT_BRACKET ; -single_declaration ::= fully_specified_type IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET ; -single_declaration ::= fully_specified_type IDENTIFIER EQUAL initializer ; - --- Grammar Note: No 'enum', or 'typedef'. - ---fully_specified_type ::= type_specifier ; ---fully_specified_type ::= type_qualifier type_specifier ; - -fully_specified_type ::= type_specifier ; -fully_specified_type ::= type_qualifier ; -fully_specified_type ::= fully_specified_type type_specifier ; -fully_specified_type ::= fully_specified_type type_qualifier ; - -type_qualifier ::= CONST ; -type_qualifier ::= ATTRIBUTE ; -- Vertex only. -type_qualifier ::= VARYING ; -type_qualifier ::= UNIFORM ; - -type_specifier ::= type_specifier_no_prec ; -type_specifier ::= precision_qualifier type_specifier_no_prec ; - -type_specifier_no_prec ::= VOID ; -type_specifier_no_prec ::= FLOAT ; -type_specifier_no_prec ::= INT ; -type_specifier_no_prec ::= BOOL ; -type_specifier_no_prec ::= VEC2 ; -type_specifier_no_prec ::= VEC3 ; -type_specifier_no_prec ::= VEC4 ; -type_specifier_no_prec ::= BVEC2 ; -type_specifier_no_prec ::= BVEC3 ; -type_specifier_no_prec ::= BVEC4 ; -type_specifier_no_prec ::= IVEC2 ; -type_specifier_no_prec ::= IVEC3 ; -type_specifier_no_prec ::= IVEC4 ; -type_specifier_no_prec ::= MAT2 ; -type_specifier_no_prec ::= MAT3 ; -type_specifier_no_prec ::= MAT4 ; -type_specifier_no_prec ::= SAMPLER1D ; -type_specifier_no_prec ::= SAMPLER2D ; -type_specifier_no_prec ::= SAMPLER3D ; -type_specifier_no_prec ::= SAMPLERCUBE ; -type_specifier_no_prec ::= SAMPLER1DSHADOW ; -type_specifier_no_prec ::= SAMPLER2DSHADOW ; -type_specifier_no_prec ::= struct_specifier ; -type_specifier_no_prec ::= TYPE_NAME ; - -precision_qualifier ::= HIGH_PRECISION ; -precision_qualifier ::= MEDIUM_PRECISION ; -precision_qualifier ::= LOW_PRECISION ; - -struct_specifier ::= STRUCT IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE ; -/. -case $rule_number: { - types.insert(sym(2).s); -} break; -./ - -struct_specifier ::= STRUCT LEFT_BRACE struct_declaration_list RIGHT_BRACE ; - -struct_declaration_list ::= struct_declaration ; -struct_declaration_list ::= struct_declaration_list struct_declaration ; - -struct_declaration ::= type_specifier struct_declarator_list SEMICOLON ; - -struct_declarator_list ::= struct_declarator ; -struct_declarator_list ::= struct_declarator_list COMMA struct_declarator ; - -struct_declarator ::= IDENTIFIER ; -struct_declarator ::= IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET ; - -initializer ::= assignment_expression ; - -declaration_statement ::= declaration ; - -statement ::= compound_statement ; -statement ::= simple_statement ; - --- Grammar Note: No labeled statements; 'goto' is not supported. - -simple_statement ::= declaration_statement ; -simple_statement ::= expression_statement ; -simple_statement ::= selection_statement ; -simple_statement ::= iteration_statement ; -simple_statement ::= jump_statement ; - -compound_statement ::= LEFT_BRACE RIGHT_BRACE ; -compound_statement ::= LEFT_BRACE statement_list RIGHT_BRACE ; - -statement_no_new_scope ::= compound_statement_no_new_scope ; -statement_no_new_scope ::= simple_statement ; - -compound_statement_no_new_scope ::= LEFT_BRACE RIGHT_BRACE ; -compound_statement_no_new_scope ::= LEFT_BRACE statement_list RIGHT_BRACE ; - -statement_list ::= statement ; -statement_list ::= statement_list statement ; - -expression_statement ::= SEMICOLON ; -expression_statement ::= expression SEMICOLON ; - -selection_statement ::= IF LEFT_PAREN expression RIGHT_PAREN statement ELSE statement ; -selection_statement ::= IF LEFT_PAREN expression RIGHT_PAREN statement ; - --- Grammar Note: No 'switch'. Switch statements not supported. - -condition ::= expression ; -condition ::= fully_specified_type IDENTIFIER EQUAL initializer ; - -iteration_statement ::= WHILE LEFT_PAREN condition RIGHT_PAREN statement_no_new_scope ; -iteration_statement ::= DO statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON ; -iteration_statement ::= FOR LEFT_PAREN for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope ; - -for_init_statement ::= expression_statement ; -for_init_statement ::= declaration_statement ; - -conditionopt ::= ; -conditionopt ::= condition ; - -for_rest_statement ::= conditionopt SEMICOLON ; -for_rest_statement ::= conditionopt SEMICOLON expression ; - -jump_statement ::= CONTINUE SEMICOLON ; -jump_statement ::= BREAK SEMICOLON ; -jump_statement ::= RETURN SEMICOLON ; -jump_statement ::= RETURN expression SEMICOLON ; -jump_statement ::= DISCARD SEMICOLON ; -- Fragment shader only. - --- Grammar Note: No 'goto'. Gotos are not supported. - -external_declaration ::= function_definition ; -external_declaration ::= declaration ; - -function_definition ::= function_prototype compound_statement_no_new_scope ; -/. - case $rule_number: { // $rule_name - qDebug() << "--> function" << *context.function_name; - } break; -./ - - - - - -/. - } // switch - - state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT); - } - - else - { - // ### ERROR RECOVERY HERE - break; - } - } - - fprintf (stderr, "%s:%d: Syntax Error\n", qPrintable(context.fileName), context.line); - - return false; -} - -#include "glsl-lex.incl" - - -///////////////////////////// -// entry point -///////////////////////////// -int main() -{ -#if 0 // dump the GLSL grammar - for (int r = 0; r < GLSLParserTable::RULE_COUNT; ++r) - { - int ridx = GLSLParserTable::rule_index [r]; - int rhs = GLSLParserTable::rhs [r]; - printf ("%3d) %s ::=", r + 1, GLSLParserTable::spell[GLSLParserTable::rule_info [ridx]]); - ++ridx; - for (int i = ridx; i < ridx + rhs; ++i) - { - int symbol = GLSLParserTable::rule_info [i]; - if (const char *name = GLSLParserTable::spell [symbol]) - printf (" %s", name); - else - printf (" #%d", symbol); - } - printf ("\n"); - } -#endif - - GLSLParser parser; - - if (parser.parse()) - qDebug() << "OK"; - else - qDebug() << "KO"; -} - -./ diff --git a/util/qlalr/examples/glsl/glsl.pro b/util/qlalr/examples/glsl/glsl.pro deleted file mode 100644 index 8ac775f21d..0000000000 --- a/util/qlalr/examples/glsl/glsl.pro +++ /dev/null @@ -1,4 +0,0 @@ -QT = core -TARGET = glsl.bin -SOURCES += glsl.cpp - |