这是 C++ 中的词法分析器代码,任何人都可以向我解释该代码并告诉我如何从文件中读取字符串
using namespace std;
function
int isKeyword(char buffer[]){
char keywords[32][10] = {"auto","break","case","char","const","continue","default",
"do","double","else","enum","extern","float","for","goto",
"if","int","long","register","return","short","signed",
"sizeof","static","struct","switch","typedef","union",
"unsigned","void","volatile","while"};
int i, flag = 0;
这里发生了什么?为什么我们使用 strcmp 及其用途
for(i = 0; i < 32; ++i){
if(strcmp(keywords[i], buffer) == 0){
flag = 1;
break;
}
}
return flag;
}
main
int main()
{
char ch, buffer[15];
ifstream fin("program.txt");
int j=0;
if(!fin.is_open()){
cout<<"error while opening the file\n";
exit(0);
}
while(!fin.eof()){
ch = fin.get();
这里发生了什么?
if(isalnum(ch))
{
buffer[j++] = ch;
}
else if((ch == ' ' || ch == '\n') && (j != 0)){
buffer[j] = '\0';
j = 0;
if(isKeyword(buffer) == 1)
cout<<buffer<<" is keyword\n";
else
cout<<buffer<<" is identifier\n";
}
}
fin.close();
return 0;
}
最佳答案
总体思路是用一个数据结构keywords[n][m]
保存所有的关键词,然后一个词一个词地读取一个文件,检查这个词是否在keywords[ n][m]
是否为数组,即是否为关键字。
在 main 函数中,打开一个文件,逐字读取直到结束,并将该字传递给函数 iskeyword()
以判断该字是否为关键字。在 iskeyword()
函数中,我们在 for 循环中遍历二维数组 keywords[n][m]
并使用 strcmp 函数检查单词是否作为输入参数传递的字符串是否与二维数组的元素相同。如果单词在二维数组中,那么它是一个关键字,函数返回 1 并且 is keyword
被打印在屏幕上。否则返回 '0' 并将 'is identifier' 输出到屏幕。
more about strcmp here
希望这可以帮助!
关于c++ - 这是词法分析器的代码 谁能详细解释这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467213/