赞
踩
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 !&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。