언어와 같은 C의 컴파일러에 대한 스캐너를 빌드하려고하는데 효율적인 방법으로 토큰을 생성하는 데 걸리는 시간이 있습니다 ... 스캔이 있습니다. 함수 :컴파일러에서 std :: string의 효율성 향상
vector<Token> scan(string &input);
또한 어휘 적으로 올바른 파일을 읽고 주석을 제거하는 main 함수. (이 언어는 /* , */
개의 주석을 지원하지 않습니다.) 토큰을 생성하기 위해 최대한의 뭉크와 함께 DFA를 사용하고 있습니다. 스캐너의 일부가 상당히 효율적이라고 확신합니다. 그러나 스캐너는 대용량 파일을 잘 처리하지 못합니다. 왜냐하면 모든 파일이 한 문자열로 끝나기 때문에 1000 줄의 파일을 1000 줄로 연결하면 스캐너가 손상됩니다. 불행히도 내 FSM은 유니 코드와 다른 이상한 문자를 포함 할 수 있으므로 주석을 처리 할 수 없습니다. 궁금 해서요 ... stdin에있는 파일에서 토큰 벡터로 이동하는 더 좋은 방법은 함수 스캔이 단일 문자열을 가져와 단일 벡터를 반환해야하고 모든 토큰이 있어야한다는 것입니다 너무 열심히 내 나쁜 생각에 웃지 말아주세요 :)
string in = "";
string build;
while(true)
{
getline(cin, build);
if(cin.eof())
break;
if(build.find ("//") != string::npos)
build = build.substr(0, build.find("//",0));
in += " " + build;
}
try {
vector<Token> wlpp = scan(in);
...
...
그러나 이것은 좋은 해결책 인 것 같습니다. + 연산자 대신 문자열 스트림을 사용하는 아이디어를 제공합니다. istream_iterator를 사용하는 것과 어떻게 비교되는지 알고 있습니까? –