簡體   English   中英

這是詞法分析器的代碼,誰能詳細解釋一下這段代碼?

[英]This is the code of lexical analyzer can anyone explain this code in detail?

這是 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;
}

主要的

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]數組中,即是否為關鍵字 OR 不是。 在主 function 中,打開一個文件並逐字讀取直到結束,然后將該字傳遞給 function iskeyword()以決定該字是否為關鍵字。 iskeyword() function 內部,我們在 for 循環中遍歷二維數組keywords[n][m] ,並使用 strcmp function 檢查作為輸入參數傳遞的單詞字符串是否與 2-d 的元素相同d 數組與否。 如果這個詞在二維數組中,那么它的關鍵字和 function 返回 1 並且is keyword打印在屏幕上。 否則返回“0”並且“是標識符”是 output 到屏幕。 更多關於 strcmp 的信息,希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM