Это код лексического анализатора, кто-нибудь может объяснить этот код подробно? - PullRequest
1 голос
/ 19 октября 2019

это код лексического анализатора в 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;
}

1 Ответ

1 голос
/ 19 октября 2019

Общая идея состоит в том, чтобы иметь структуру данных keywords[n][m], в которой хранятся все ключевые слова, а затем читать слово за словом файл и проверять, находится ли слово в массиве keywords[n][m] или нет, т.е. является ли оно ключевым словом ИЛИ нет. В основной функции файл открывается и читается слово за словом до конца, а слово передается в функцию iskeyword(), чтобы определить, является ли слово ключевым словом или нет. Внутри функции iskeyword() мы перебираем 2-й массив keywords[n][m] в цикле for и используем функцию strcmp, чтобы проверить, совпадает ли строка слова, переданная в качестве входного аргумента, с элементом 2-го массива или нет,Если слово находится в двумерном массиве, оно является ключевым словом, и функция возвращает 1, а is keyword выводится на экран. В противном случае возвращается «0», а «идентификатор» выводится на экран. подробнее о strcmp здесь надеюсь, это поможет!

...