[Mesa-dev] [PATCH 2/6] glsl: Add productions to GLSL grammar for switch statement
Ian Romanick
idr at freedesktop.org
Mon Jun 20 15:39:10 PDT 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 06/17/2011 05:43 PM, Dan McCabe wrote:
> The grammar is modified to support switch statements. Rather than follow the
> grammar in the appendix, which allows case labels to be placed ANYWHERE
> as a regular statement, we follow the development of the grammar as
> described in the body of the GLSL.
>
> In this variation, the switch statement has a body which consists of a list
> of case statements. A case statement is preceded by a list of case labels and
> ends with a list of statements.
Either this patch or patch 6/6 is the right place to restrict
switch-statements and case labels to GLSL 1.30. From the looks of the
series, these patches will merrily allow switch-statements on any GLSL
version. That seems bad. :)
> ---
> src/glsl/glsl_parser.yy | 64 ++++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 61 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 2c0498e..b3727ce 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -206,6 +206,12 @@
> %type <declaration> struct_declarator_list
> %type <node> selection_statement
> %type <selection_rest_statement> selection_rest_statement
> +%type <node> switch_statement
> +%type <node> switch_body
> +%type <node> case_label
> +%type <node> case_label_list
> +%type <node> case_statement
> +%type <node> case_statement_list
> %type <node> iteration_statement
> %type <node> condition
> %type <node> conditionopt
> @@ -1519,8 +1525,7 @@ simple_statement:
> declaration_statement
> | expression_statement
> | selection_statement
> - | switch_statement { $$ = NULL; }
> - | case_label { $$ = NULL; }
> + | switch_statement
> | iteration_statement
> | jump_statement
> ;
> @@ -1642,15 +1647,68 @@ condition:
> }
> ;
>
> +/*
> + * siwtch_statement grammar is based on the syntax described in the body
> + * of the GLSL spec, not in it's appendix!!!
> + */
> switch_statement:
> - SWITCH '(' expression ')' compound_statement
> + SWITCH '(' expression ')' switch_body
> + {
> + $$ = NULL;
> + }
> + ;
> +
> +switch_body:
> + '{' '}'
> + {
> + $$ = NULL;
> + }
> + | '{' case_statement_list '}'
> + {
> + $$ = NULL;
> + }
> ;
>
> case_label:
> CASE expression ':'
> + {
> + $$ = NULL;
> + }
> | DEFAULT ':'
> + {
> + $$ = NULL;
> + }
> ;
>
> +case_label_list:
> + case_label
> + {
> + $$ = NULL;
> + }
> + | case_label_list case_label
> + {
> + $$ = NULL;
> + }
> + ;
> +
> +case_statement:
> + case_label_list statement_list
> + {
> + $$ = NULL;
> + }
> + ;
> +
> +case_statement_list:
> + case_statement
> + {
> + $$ = NULL;
> + }
> + | case_statement_list case_statement
> + {
> + $$ = NULL;
> + }
> + ;
> +
> iteration_statement:
> WHILE '(' condition ')' statement_no_new_scope
> {
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
iEYEARECAAYFAk3/zA4ACgkQX1gOwKyEAw8ntQCgnhIlrhzQIJoLb93iSXge1LI1
qiQAn2fnderiysv+W11krRxrSc7M9VtJ
=2Juy
-----END PGP SIGNATURE-----
More information about the mesa-dev
mailing list