资源简介
非常基础的词法分析器,能够将各个单词分开,判断各个单词的类型,并输出相应的tokens和符号表。还存在一些BUG,希望大家不吝赐教。

代码片段和文件信息
#include“fileIO.h“
#include“table.h“
using namespace std;
int typeCodetokenNumlength; //分别表示种别码,当前单词中的字符位置的下一位以及代码长度
int presentChar=0row=1; //分别表示当前读取到的文件的字符的下一位,读取代码当前行数
char token[15]; //表示当前读取的单词
char ch; //表示当前读取的字符
char* keywords[13]={“int““float““double““char““string““while““if““else““for““return““break““switch““case“};
char str[50]; //专门用于保存字符串或者字符
tokenTable table[200];
void analyzer(string code)
{
for(int i=0;i<15;i++)
token[i]=NULL;
ch=code[presentChar++];
while(ch==‘ ‘||ch==‘\t‘)
{ //过滤空格符和制表符
if(presentChar==length)
{
typeCode=0; //typeCode=0来表示代码已到末尾
return; //跳出函数
}
ch=code[presentChar++];
}
tokenNum=0;
if(ch>=‘a‘&&ch<=‘z‘){ //判断是否是关键字,否则为标识符
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘)||(ch>=‘A‘&&ch<=‘Z‘)||ch==‘_‘)
{
token[tokenNum++]=ch;
ch=code[presentChar++];
}
token[tokenNum]=‘\0‘;
presentChar--; //计算完一个token后,presentChar会指向空格符的下一个符号,所以必须减一
typeCode=IDENTIFIER;
for(int i=0;i<13;i++){
if(!strcmp(tokenkeywords[i])){
typeCode=i+1;
break;
}
}
}
else if((ch>=‘A‘&&ch<=‘Z‘)||ch==‘_‘||ch<0)
{ //上一个if已经包含了a到z开头的标识符,进入这个if的也都是标识符
while((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘0‘&&ch<=‘9‘)||ch==‘_‘||ch<0)
{
if(ch<0)
{
token[tokenNum++]=ch;
token[tokenNum++]=code[presentChar++];
}
else
token[tokenNum++]=ch;
ch=code[presentChar++];
}
token[tokenNum++]=‘\0‘;
presentChar--; //计算完一个token后,presentChar会指向空格符的下一个符号,所以必须减一
typeCode=IDENTIFIER;
}
else if(ch>=‘0‘&&ch<=‘9‘)
{
while((ch>=‘0‘&&ch<=‘9‘)||ch==‘.‘)
{
token[tokenNum++]=ch;
ch=code[presentChar++];
}
token[tokenNum++]=‘\0‘;
presentChar--; //计算完一个token后,presentChar会指向空格符的下一个符号,所以必须减一
typeCode=NUMBER;
}
else switch(ch)
{
case ‘+‘:
typeCode=ADD;token[tokenNum++]=ch;
ch=code[presentChar];
if(ch==‘+‘)
{
token[tokenNum]=ch;
typeCode=DADD;
presentChar++;
}
break;
case ‘-‘:
typeCode=SUB;token[tokenNum++]=ch;
ch=code[presentChar];
if(ch==‘-‘)
{
token[tokenNum]=ch;
typeCode=DSUB;
presentChar++;
}
break;
case ‘*‘:typeCode=MUL;token[0]=ch;break;
case ‘/‘:typeCode=DIV;token[0]=ch;break;
case ‘%‘:typeCode=MOD;token[0]=ch;break;
case ‘=‘:
typeCode=ASSIGN;token[tokenNum++]=ch;
ch=code[presentChar];
if(ch==‘=‘)
{
token[tokenNum]=ch;
typeCode=EQUAL;
presentChar++;
}
break;
case ‘!‘:
typeCode=EXC;token[tokenNum++]=ch;
ch=code[presentChar];
if(ch==‘=‘)
{
token[tokenNum]=ch;
typeCode=NEQ;
presentChar++;
}
break;
case ‘>‘:
typeCode=MORETHAN;token[tokenNum++]=ch;
ch=code[presentChar];
if(ch==‘=‘)
{
token[tokenNum]=ch;
typeCode=MOE;
presentC
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 602 2013-04-12 17:15 lee\Debug\cl.command.1.tlog
文件 23052 2013-04-12 17:15 lee\Debug\CL.read.1.tlog
文件 264 2013-04-12 17:15 lee\Debug\CL.write.1.tlog
文件 406 2013-03-02 13:04 lee\Debug\lee.exe.em
文件 472 2013-03-02 13:04 lee\Debug\lee.exe.em
文件 381 2013-04-12 17:15 lee\Debug\lee.exe.intermediate.manifest
文件 52 2013-04-12 17:15 lee\Debug\lee.lastbuildstate
文件 1998 2013-04-12 17:15 lee\Debug\lee.log
文件 196 2013-03-02 12:54 lee\Debug\lee_manifest.rc
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
文件 2 2013-04-12 17:15 lee\Debug\li
............此处省略218个文件信息
相关资源
- 编译原理课程设计:词法语法编译器
- 递归下降分析器分析普通的四则运算
- 编译词法分析器识别关键字常数和符
- SAMPLE (类pascal) 词法分析程序 C 版
- Delphi做的用于分析Pascal语言的词法分
- 编译原理实验:词法分析,语法分析
- 编译原理语法分析器、词法分析器
- 哈工大威海-编译原理实验报告和源码
- 编译原理课程设计 while do循环语句翻
- 词法分析器 -计算器版
- 词法语法分析器
- 词法分析器自动生成器 FLEX
- Pascal语义分析器
- 中科院汉语词法分析系统ICTCLAS安装包
- StringToken
- 编译原理语法分析器课程设计
- 词法分析器Lex(编译原理)
- plus token白皮书
- 杭电编译原理语法分析器
- LR0语法分析器
- 华工编译原理实验词法分析+语法分析
- 词法分析器
- 编译原理语法分析器课程设计完美版
- 实验四LL(1)分析器的生成
- 词法分析器有界面
- 武汉大学国际软件学院解释器构造作
- 编译原理课程设计(词法分析和语法
- 基于winpcap的网络协议分析器
- 利用FLEX设计一个small c的词法分析器文
- 编译原理 词法和语法分析
评论
共有 条评论