字符未正确读取
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
所以我想使用词法分析器来改进我对字符和字符串的处理,但事实证明我完全无法理解它们。我做了两个非常简单的函数来识别特定的字符和 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