Boost :: spirit似乎包含了很多模板魔法,我无法理解文档。 我想解析GLSL(OpenGL Shader源代码)并从源中提取和输出属性名称及其类型。我将GL API版本限制为GL 3.3,因此使用简单的GL_ARB_interface_query是没有选项的,我需要直接从着色器源读取字符串。
以下是我在“vec2 ks_Vertex”中尝试提取的GLSL源代码。 “在SpriteTexID中扁平化;”部分。棘手的部分是,一些外部变化在接口块中如下:
out VertexData {
smooth vec4 Color;
smooth vec2 TexCoord;
};
我需要提取“VertexData”,“vec4 Color”和“vec2 TexCoord”字符串。 完整的来源:
#version 150
uniform isamplerBuffer ks_MaterialIDBuffer;
in vec2 ks_Vertex;
in vec4 ks_Color;
in vec2 ks_TexCoord;
layout(shared) uniform Camera {
vec2 Position;
vec4 Viewport;
mat4 ModelviewProjMatrix;
mat4 ModelviewMatrix;
mat4 ProjectionMatrix;
};
out VertexData {
smooth vec4 Color;
smooth vec2 TexCoord;
} Out;
flat out int SpriteTexID;
flat out int SpriteMaterialID;
void main()
{
int sprid = gl_VertexID / 4;
ivec4 material = texelFetch(ks_MaterialIDBuffer, sprid);
Out.Color = ks_Color;
Out.TexCoord = ks_TexCoord;
gl_Position = ModelviewProjMatrix * vec4(ks_Vertex, 0.0f, 1.0f);
SpriteTexID = material.r;
SpriteMaterialID = material.g;
}
我特别需要不同的名称,但我不知道如何使用boost :: spirit构造这样的解析器。我几乎没有制作一个计算单词的词法分析器。如何用boost :: spirit定义这样的解析器?