- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理词法分析(Compiler theory, lexical analysis)
编译原理词法分析(Compiler theory, lexical analysis)
#包含iostream > <
#包括<字符串>
使用名称空间;
#定义马克斯32
字符“=”;
int行= 1,行= 0;
/ /关键字表单词种别码1
字符串键“32”=“自动”、“中断”、“捕获”、“捕获”、“char”、“类”、“常量”、“继续”、“默认”、“删除”、“做”、“双”,
“其他”、“枚举”、“浮”、“对”、“如果”、“国际”、“长”、“新”、“私人”、“保护”、“公共”、“登记”、“回归”、“短”、“静”,
“结构”、“开关”、“这个”、“空”、“同时”};
/ /标示符表单词种别码2
字符串标识符[ 200 ];
/ /常数表单词种别码3
字符串常量[ 50 ];
/ /算术运算符表单词种别码4
字符串操作符[ 4 ] =“+”,“-”,“*”,“/”};
/ /界符表单词种别码5
字符串分隔符11“{”,“(”,“”),“[”,“”“,”“,”“,”“,”“{”,“}”,“!”“\”“};
/ /关系运算符表单词种别码6
字符串r_operators [ ] = {“<”、“> =”,“= =”、“>”、“< =“};
/ /关键字判断
int Iskey(字符串C){
int i;
对于(i = 0;i < max;i + +){
如果(键i)比较(c)= 0)返回1;
}
返回0;
}
/ /判断是否为字母
int IsLetter(char c){
如果(((C≤Z)和(C>=a))| |((C≤Z)和(C > =“”)))返回1;
否则返回0;
}
int IsDigit(char c){ //判断是否为数字
如果(C > = '0'和C < = 9)返回1;
否则返回0;
}
/ /将ARR中的标示符插入符号表并且返回符号表的指针
int InsertId(String s){
对于(int = i 0;i < 200;i + +)
{
如果(标识符i =“=”)
{
标识符[ i ];
还我;
}
}
返回0;
}
/ /将ARR中的常实数插入常数表并且返回常数表的指针
int InsertConst(String s){
对于(int = i 0;i < 50;i + +)
{
如果(常数i =“=”)
{
常数[ i ];
还我;
}
}
返回0;
}
无效的分析(文件*外地个人识别号){
/ / ARR相当于课本中的strtoken
字符串arr =“”;
而((CH =指针(外地个人识别号))!= EOF)
{
ARR =“”;
如果(CH = =”| | CH = = '\t' | | CH = = '\n')
{
如果(= =“n”)
行+;
行=0;
}
如果(IsLetter(CH))
{
而(IsLetter(CH)| | IsDigit(CH))
{
ARR = ARR CH;
CH =指针(外地个人识别号);
}
/ /文件指针回移一个位置
fseek(外地个人识别号,1l,seek_cur);
/ /列增加一
行+;
如果(Iskey(ARR))
{
cout << ARR <<“T T(1,”<< ARR <<“)”
<<“T T关键字“<<”T T(“<<线<<”,“<<排<<“)”
<< endl;
}
其他的
{
对于(int = i 0;i < 200;i + +){
如果(标识符[我]。比较(ARR)= = 0)
{ cout << ARR <<“T T(2,”<< ARR <<”)“<<”T T标示符“<<”T T(“<<线<<”,“<<排<<”)“<< endl;断裂;}
别的{
插(ARR);
cout << ARR <<“T T(2,”<< ARR <<”)“<<”T T标示符“<<”T T(“<<线<<”,“<<排<<”)“<< endl;break;}
}
}
}
/ /处理常数
如果(IsDigit(CH))
{
而(IsDigit(CH)| | CH = =“”& IsDigit(指针(外地个人识别号)))
{
ARR = ARR CH;
CH =指针(外地个人识别号);
}
fseek(外地个人识别号,1l,seek_cur);
如果(IsLetter(CH =指针(外地个人识别号)))
{
而(IsLetter(CH)| | IsDigit(CH))
{
ARR = ARR CH;
CH =指针(外地个人识别号);
}
fseek(外地个人识别号,1l,seek_cur);
行+;
cout << ARR <<“T“恐怖”<<“T teroor“<<”T T(“<<线<<”,“<<排<<”)“<< endl;
}
别的{
行+;
对于(int = i
您可能关注的文档
- 答题技巧 target=_blank(Answer skills target=_blank).doc
- 策划基本功(Planning basic skills).doc
- 第五章原子结构与元素周期律(The fifth chapter is atomic structure and periodic law of elements).doc
- 糙米水(Brown rice water).doc
- 繁体字大全适合自主招生(Traditional Chinese characters are suitable for independent enrollment).doc
- 策划改变人生营销推动世界(Plan, change life, marketing, promote the world).doc
- 粗鄙文化造就贫穷的富饶(Vulgarity breeds poor wealth).doc
- 编写html代码(Writing HTML code).doc
- 编导培训 编导专业-影评写作 讲解(Directing, training, directing and directing - film review and writing).doc
- 编程实践(Programming practice).doc
文档评论(0)