GLSL 쉐이더 코드를위한 프로세서를 작성하려고합니다. 코드를 분석하고 각 쉐이더에 대해 처리해야하는 입력과 출력을 동적으로 결정할 수있게 해줍니다.왜 여러 정규식 일치가 발생합니까?
이를 달성하기 위해 OpenGL을 통해 컴파일하기 전에 일부 정규식을 사용하여 셰이더 코드를 구문 분석하기로 결정했습니다.
정규식이 예상대로 작동하는지 확인하는 테스트 코드를 작성했습니다.
코드 :
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main()
{
string strInput = " in vec3 i_vPosition; ";
smatch match;
// Will appear in regex as:
// \bin\s+[a-zA-Z0-9]+\s+[a-zA-Z0-9_]+\s*(\[[0-9]+\])?\s*;
regex rgx("\\bin\\s+[a-zA-Z0-9]+\\s+[a-zA-Z0-9_]+\\s*(\\[[0-9]+\\])?\\s*;");
bool bMatchFound = regex_search(strInput, match, rgx);
cout << "Match found: " << bMatchFound << endl;
for (int i = 0; i < match.size(); ++i)
{
cout << "match " << i << " (" << match[i] << ") ";
cout << "at position " << match.position(i) << std::endl;
}
}
유일한 문제는 위의 코드는 하나가 아닌 두 개의 결과를 생성하는 것입니다. 결과 중 하나가 비어 있지만.
출력 :
Match found: 1
match 0 (in vec3 i_vPosition;) at position 6
match 1() at position 34
내가 궁극적으로 내가 입력으로 전체 파일을 제공 할 때 여러 결과를 생성 할,하지만 난 일관성있는 결과를 처리 할 수 있도록 약간의 일관성을 좀하고 싶습니다 방법.
내가 예상 한 결과가 여러 개인 이유는 무엇입니까?
어떤 컴파일러를 사용하고 있습니까? VC++ 10은 같은 결과를 주지만 GCC 4.7.2는'rgx'를 인스턴스화 할 때'std :: regex_error'를 던졌습니다. –
VC++ 10을 사용하고 있습니다. – BlazeCell