C/C++ 编译原理实验 词法分析

1、待分析的C语言子集的词法1) 关键字main if else int return void while (都是小写)2) 专用符号= + — * / < <= < >= = = != ; : ,{ } [ ] ( )3) 其他标记STRING::=” [^”]* “ID::=letter(letter|digit)*INT::=digit digit*letter::= a|…|z|A|…|Zdigit::=
摘要由CSDN通过智能技术生成

1、待分析的C语言子集的词法
1) 关键字
main if else int return void while (都是小写)
2) 专用符号
= + — * / < <= < >= = = != ; : ,{ } [ ] ( )
3) 其他标记
STRING::=” [^”]* “
ID::=letter(letter|digit)*
INT::=digit digit*
letter::= a|…|z|A|…|Z
digit::= 0|…|9
4)空格由空白、制表符和换行符组成
空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。
在这里插入图片描述
3、词法分析程序的功能
输入:所给文法的源程序字符串
输出:二元组(syn, token或sum)构成的序列。其中syn 为单词种别码;token 为存放的单词自身字符串;sum为整型常量(作为常量的值)。实现时,可将单词的二元组用结构进行处理

源.cpp

//输入:源程序字符串 所给文法的
//扫描子程序
//输出:单词种别码syn 字符串token/整型常量sum
//关键字(小写)--关键字表,否--一般字符
//初始化-->忽略空格/注释-->文件结束?-->判断字母?数字?运算符、界符等?其他符号-报错
//字母:拼接,关键字?否-syn=10,对应关键字的种别码
//数字:拼接,syn=20,
//符号:为不同符号给出相应的syn值,,,其它error!
#include "code.h"
int main() {
 char buf[4048] = { '0' };//扫描缓冲区
 //预处理,去掉注释
 pro_process(buf);
 cout << buf<<endl;
 ofstream cout_file("Lex_r.txt", ios::out);
 code_val t;
 
 //扫描子程序
 do{
  t = scanner(buf);//依次扫描一个单词二元式
  //printf("%s\t%d", t.code,t.val);
  cout << t.code << '\t' << t.val << endl;
  cout_file << t.code << '\t' << t.val << endl;//写入文件Lex_r
 } while (t.code !&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值