SDUT小C语言–词法分析程序

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

每行单词数不超过10个
小C语言文法如上,现在我们对小C语言写的一个源程序进行词法分析,分析出关键字、自定义标识符、整数、界符和运算符。
关键字:main if else for while int
自定义标识符:除关键字外的标识符
整数:无符号整数
界符:{ } ( ) , ;
运算符:= + - * / < <= > >= == !=

### 代码
```
#include
using namespace std;

string key = "mainifelsewhileintfor", s, temporary;
void show(string &s)
{
if (s == "")
return;
else if ('0' <= s[0] && s[0] <= '9')
cout << "(integer," << s << ")" << endl;
else if (key.find(s) != -1 && s.size() >= 2)
cout << "(keyword," << s << ")" << endl;
else
cout << "(identifier," << s << ")" << endl;
s.clear();
}

signed main()
{
while (cin >> s)
{
for (int i = 0; i < s.size(); i++)
if (s[i] == '=' || s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '>' || s[i] == '<' || s[i] == '!')
{
show(temporary);
if (i + 1 < s.size() && s[i + 1] == '=')
cout << "(operator," << s[i] << s[++i] << ")" << endl;
else
cout << "(operator," << s[i] << ")" << endl;
}
else if (s[i] == '(' || s[i] == ')' || s[i] == '{' || s[i] == '}' || s[i] == ',' || s[i] == ';')
show(temporary), cout << "(boundary," << s[i] << ")" << endl;
else
temporary += s[i];

    show(temporary);
}

}

原文链接: https://www.cnblogs.com/zzh1206/p/17056295.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/312474

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:24
下一篇 2023年2月16日 下午12:24

相关推荐