[英]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.