用 C/C++ 编写一个 C 语言的词法分析器程序

#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
#define maxn 100
#include<map>
//词法分析器,对于输入的串,先处理空格,过滤掉,进入主程序,判断是字母,循环判断字母或数字
//循环出去后,判断所读字符串是否是保留字,若是输出保留字及其编码,若不是,输出标识符和编码
//判断首字符是数字,则可能是常数,识别首字符后,循环判断是否是数字,出循环后指针回退一个字符
//输出数字
//需要的函数,getbe()过滤空格,connect用string实现,back()回退一个指针
string Reversed[34]={
   " ","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 p;
string prog;
string str;
int i;
void read_prog(string& prog)
{
   
	char c;
	while(scanf("%c",&c)!=EOF){
   
		prog += c;
	}
}
void getbe()
{
   
    while(prog[p]==' '){
   
        p++;
    }
}
bool digit(char c)
{
   
    if('0'<=c&&c<='9'){
   
        return true;
    }
    else{
   
        return false;
    }
}
bool letter(char c)
{
   
    if(('a'<=c&&c<='z')||('A'<=c&&c<='Z')){
   
        return true;
    }
    else{
   
        return false;
    }
}
int digitorletter(char c)
{
   
    if(letter(c)){
   
        return 1;//字母
    }
    if(digit(c)){
   
        return 2;//数字
    }
    return 3;//其他
}
bool isReversed(string str)
{
   
    for(int j=1;j<=33;j++){
   
        if(str==Reversed[j]){
   
            cout<<i++<<':'<<' '<<'<'<<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值