[英]I'm trying to design a lexical Analyzer in C
我的代碼:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main()
{
int identifier_counter=0,constants_counter=0,operators_counter=0,delimeters_counter=0,i,j,x;
char expr[50],operators[50],identifiers[50],constants[50],delimeters[50];
printf("Enter the Expression: ");
scanf("%[^\n]s",expr);
for(i=0;i<strlen(expr);i++)
{
if(isspace(expr[i])){
continue;
}
else if(isalpha(expr[i]))
{
identifiers[identifier_counter]=expr[i];
identifier_counter++;
}
else if(isdigit(expr[i]))
{
x=(expr[i]-'0');
i=i+1;
while(isdigit(expr[i]))
{
x=x*10+(expr[i]-'0');
i++;
}
i=i-1;
constants[constants_counter]=x;
constants_counter++;
}
else if(expr[i]==','||expr[i]==';'||expr[i]=='{'||expr[i]=='}')
{
if(expr[i]==',')
{
delimeters[delimeters_counter]=',';
delimeters_counter++;
}
else if(expr[i]==';')
{
delimeters[delimeters_counter]=';';
delimeters_counter++;
}
else if(expr[i]=='{')
{
delimeters[delimeters_counter]='{';
delimeters_counter++;
}
else if(expr[i]=='}')
{
delimeters[delimeters_counter]='}';
delimeters_counter++;
}
}
else
{
if(expr[i]=='*')
{
operators[operators_counter]='*';
operators_counter++;
}
else if(expr[i]=='-')
{
operators[operators_counter]='-';
operators_counter++;
}
else if(expr[i]=='+')
{
operators[operators_counter]='+';
operators_counter++;
}
else if(expr[i]=='=')
{
operators[operators_counter]='=';
operators_counter++;
}
else if(expr[i]=='/')
{
operators[operators_counter]='/';
operators_counter++;
}
else if(expr[i]=='%')
{
operators[operators_counter]='%';
operators_counter++;
}
}
}
printf("\nIdentifiers are: ");
for(j=0;j<identifier_counter;j++)
{
printf("%c ",identifiers[j]);
}
printf("\nConstants are: ");
for(j=0;j<constants_counter;j++)
{
printf("%d ",constants[j]);
}
printf("\nDelimeters are: ");
for(j=0;j<delimeters_counter;j++)
{
printf("%c ",delimeters[j]);
}
printf("\nOperators are: ");
for(j=0;j<operators_counter;j++)
{
printf("%c ",operators[j]);
}
return 0;
}
我的查詢:
我想將變量名稱后的數字或下划線視為“標識符”。 例如:用戶輸入是“a4”。 我希望程序打印“標識符是:a4”。 在我的代碼中,“a”被視為標識符,“4”被視為常量。 如果用戶輸入是:“a 4”,則可以將“a”作為標識符打印,將“4”打印為常量,因為兩者之間有空格。
我想為數據類型生成一個令牌。 如果用戶鍵入“int”,它應該返回“數據類型為:int”。 我知道一個過程,但它既冗長又耗時,我試圖搜索是否有任何內置函數以便它們可以返回數據類型,但我找不到任何東西。
你能幫我解決這兩個查詢以及我應該如何相應地更新我的代碼。 謝謝你。
你應該把你的問題分成小塊。 首先,如何識別標識符? 編寫一個 function,它接受一個字符串並返回 true,如果它以標識符開頭。 如果你已經這樣做了,讓 function 返回標識符的長度。 現在對數字和你想要的一切做同樣的事情。 現在你已經構建了一個分詞器/詞法分析器。 我在這里有一個實現(但更大的一個)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.