当前位置:   article > 正文

C/C++ 编译原理实验 词法分析_山东大学编译原理实验对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|…|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 !&
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号