小C语言--词法分析程序

Input
输入一个小C语言源程序,源程序长度不超过2000个字符,保证输入合法。
Output
按照源程序中单词出现顺序输出,输出二元组形式的单词串。

(单词种类,单词值)

单词一共5个种类:

关键字:用keyword表示
自定义标识符:用identifier表示
整数:用integer表示
界符:用boundary表示
运算符:用operator表示

每种单词值用该单词的符号串表示。

#include <iostream>
#include <string>
using namespace std;
void judge(string s)
{
    if(s[0]>='0'&&s[0]<='9') //开头是数字肯定就为数字
    {
        cout<<"(integer,"<<s<<")"<<endl;
    }
    else if(s=="main"||s=="if"||s=="else"||s=="for"||s=="while"||s=="int")
    {
        cout<<"(keyword,"<<s<<")"<<endl;
    }
    else
    {
        cout<<"(identifier,"<<s<<")"<<endl;
    }
}
void lexical_analysis()
{
    string s;
    while(cin>>s)
    {
        string temp="";
        for(int i=0; i<s.length(); i++)
        {
            if(s[i] == '=' || s[i] == '+' || s[i] == '-'||s[i] == '*'
                    || s[i] == '/' || s[i] == '<' || s[i] == '>' || s[i] == '!')
            {
                if(temp.length())
                {
                    judge(temp);
                }
                temp="";
                if(s[i+1]=='=')
                {
                    cout<<"(operator,"<<s[i]<<s[i+1]<<")"<<endl;
                    i++;
                }
                else
                {
                    cout<<"(operator,"<<s[i]<<")"<<endl;
                }
            }
            else if(s[i] == '(' || s[i] == ')' || s[i] == '{'||s[i] == '}'
                    || s[i] == ',' || s[i] ==';')
            {
                if(temp.length())
                {
                    judge(temp);
                }
                temp="";
                cout<<"(boundary,"<<s[i]<<")"<<endl;
            }
            else
            {
                temp=temp+s[i];
            }
        }
        if(temp.length())
        {
            judge(temp);
        }
    }
}
int main()
{
    lexical_analysis();
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言词法分析程序主要用于对源程序进行分析,将源程序中的各种单词进行分类提取。根据引用和引用中提供的信息,词法分析程序可以将源程序中的关键字、自定义标识符、整数、界符和运算符进行分析和提取。 关键字包括main、if、else、for、while和int等。自定义标识符是除了关键字之外的标识符。整数是无符号的整数。界符包括大括号{}、小括号()、逗号,和分号;。运算符包括等号=、减号-、乘号*、除号/、小于号<、左移运算符<<、大于等于>=、等于==和不等于!=等。 在编写词法分析程序时,可以使用字符串处理函数,例如gets、strcpy和strcmp等,来从键盘获取源程序输入,并对字符串进行复制和比较操作,以便进行单词的分类和提取。 通过词法分析程序,可以将源程序中的各种单词按照其类型进行分类,并提取出来,从而为后续的语法分析和语义分析提供基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [小C语言--词法分析程序](https://blog.csdn.net/wq3699823668/article/details/100599572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [A - 小C语言--词法分析程序](https://blog.csdn.net/Mercury_Lc/article/details/108685127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [词法分析程序c语言编写)](https://download.csdn.net/download/wviyong/1797051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值