使用c++和递归下降法实现了GLSL的词法分析器和语法分析器
由两部分组成,为Lexer(词法分析器)和Parser(语法分析器)
如果控制台输入的代码符合以下GLSL文法,则输出Accept,否则Reject
toplevel :=
version definition*
version :=
'#version' NUMBER
definition :=
function_definition
global_variable_definition
function_definition :=
function_prototype '{' sentence* '}'
function_prototype :=
TYPE identifier '(' ')'
TYPE identifier '(' TYPE identifier (',' TYPE identifier)* ')'
sentence :=
'{' sentence* '}'
expression ';'
variable_definition ';'
'if' '(' expression ')' sentence
'if' '(' expression ')' sentence 'else' sentence
'for' '(' expression ';' expression ';' expression ')' sentence
'for' '(' variable_definition ';' expression ';' expression ')' sentence
';'
'return' ';'
'return' expression ';'
variable_definition :=
TYPE identifier '=' expression
'const' TYPE identifier '=' expression
expression :=
expression '.x'
expression '.y'
expression '.z'
expression '.w'
TYPE '(' expression_list ')'
'{' expression_list '}'
'(' expression ')'
NUMBER
identifier
identifier '(' expression_list ')'
identifier '[' expression ']'
expression '++'
expression '--'
'++' expression
'--' expression
'+' expression
'-' expression
'~' expression
'!' expression
expression '' expression
expression '/' expression
expression '%' expression
expression '+' expression
expression '-' expression
expression '<<' expression
expression '>>' expression
expression '>=' expression
expression '<=' expression
expression '>' expression
expression '<' expression
expression '==' expression
expression '!=' expression
expression '&' expression
expression '^' expression
expression '|' expression
expression '&&' expression
expression '^' expression
expression '||' expression
expression '?' expression ':' expression
expression '=' expression
expression '+=' expression
expression '-=' expression
expression '=' expression
expression '/=' expression
expression '%=' expression
expression '<<=' expression
expression '>>=' expression
expression '||=' expression
expression '&&=' expression
expression '|=' expression
expression '&=' expression
expression ',' expression
expression_list := expression (',' expression)* /* empty */
global_variable_definition :=
(为简化翻译,带有layout的全局变量,无论其相关数值如何,全部翻译为外部(external)全局变量即可)
layout_defaults TYPE identifier ';'
layout_defaults :=
layout_uniform_defaults
layout_in_defaults
layout_out_defaults
layout_uniform_defaults :=
layout_qualifier 'uniform'
layout_in_defaults :=
layout_qualifier 'in'
layout_out_defaults :=
layout_qualifier 'out'
layout_qualifier :=
'layout' '(' layout_qualifier_id_list ')'
layout_qualifier_id_list :=
layout_qualifier_id (',' layout_qualifier_id)*
layout_qualifier_id :=
layout_identidier
layout_identidier '=' NUMBER
layout_identidier :=
'location'
'binding'
TYPE包括以下类型: void bool int float double vec2 vec3 vec4 mat2 mat3 mat4
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。