字符未正确读取

Chars are not read properly

所以我想使用词法分析器来改进我对字符和字符串的处理,但事实证明我完全无法理解它们。我做了两个非常简单的函数来识别特定的字符和 return 真或假。

//Not the source code THIS IS ONLY AN EXAMPLE but it works this way:
bool is_char(char c)
{
    switch(c)
    {
        case 'a':
            return true;
            break;
        .
        .
        .
        default:
            return false;
            break;
    }
}

现在我创建了另一个名为 is_token 的函数来查看我是否有非字母字符并且它部分起作用。

bool is_token(char c) {
  switch (c) {
    case '[=11=]':
        return false;
        break;
    case '{':
        return true;
        break;
    case '}':
        return true;
        break;
    case '=':
        return true;
        break;
    case ';':
        return true;
        break;
    default:
      return false;
  }
}

它在第一个“;”时只工作一次然后就彻底失败了。从来没有检测到什么。这是我尝试 lex 的代码:

int a;

int main()
{
    return a;
}

代码是这样工作的:

ifstream file;
//argv is the path
file.open(argv[1]);

vector<char*> words;
string line, code, word; 

while(getline(file, line))
{
    //I was just lazy and reused this loop
    code += line;
}

for(int i = 0; i < code.size(); i++)
{
    if(is_char(code[i]))
    {
        word += code[i];
    }else{
        words.push_back(word);
        word = "";
        if(is_token(code[i])){
            //Just so I know that i registered a Token
            words.push_back("Token");
        }
    }
}

for(int i = ; i < words.size(); i++)
{
    cout << words[i] << endl;
}

字母字符没有问题,但相同的算法突然因新字符而崩溃。我在这里监督什么吗?或者它并没有像我想的那样起作用?

is_char()中:

bool is_char(char c)
{
    switch(c)
    {
        case 'a':
            return true;
            break;         // note: useless break
    }
}

如果您传递除 a 之外的任何内容,该函数将不会 return 一个 bool,这使得程序具有 未定义的行为 。更改您的代码,使其始终return是某些东西:

bool is_char(char c)
{
    switch(c)
    {
        case 'a':
            return true;
    }
    return false;
}

所以事实证明我只是增加了错误的值,它与我在这里显示的代码无关:D

但感谢所有回答我并试图提供帮助的人!下次我应该更正确地看待我的价值观 :D