# GLSLParser **Repository Path**: zhu-rongrong-1062/glslparser ## Basic Information - **Project Name**: GLSLParser - **Description**: 使用c++和递归下降法实现了GLSL的词法分析器和语法分析器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-30 - **Last Updated**: 2023-06-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: glsl, parser ## README # GLSLParser #### 介绍 使用c++和递归下降法实现了GLSL的词法分析器和语法分析器 #### 软件架构 由两部分组成,为Lexer(词法分析器)和Parser(语法分析器) 如果控制台输入的代码符合以下GLSL文法,则输出Accept,否则Reject ### 实现的GLSL文法 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