资源简介
编译原理——词法分析器设计与实现,而且完整项目,可运行
针对于pascal语言,也可针对于c语言,只需要更改好关键字保留字
代码片段和文件信息
#include
#include
#include
#include
#include
int i row = 0 line = 0;
char a[1000]; //程序
int number[1000][100]; //常数表
char mark[100][5]; //标识符表
//词法分析
int wordanalysis()
{
if ((a[i] >= ‘A‘&&a[i] <= ‘Z‘)||(a[i]>=‘a‘&&a[i]<=‘z‘)) //分析标识符和保留字
{
char word[10];
char pro[100][100] = { “PROGRAM“ “BEGIN“ “END“ “VAR“ “INTEGER“ “WHILE“ “IF“ “THEN“ “ELSE“ “DO“ “PROCEDURE“
“char““int““if““else““var“ “return““break““do““while““for““double““float““short“}; //保留字表
int n = 0;
word[n++] = a[i++];
//若字符为A~Z或0~9,则继续读取
while ((a[i] >= ‘A‘&&a[i] <= ‘Z‘) || (a[i] >= ‘0‘ && a[i] <= ‘9‘)||(a[i]>=‘a‘&&a[i]<=‘z‘))
{
word[n++] = a[i++];
}
word[n] = ‘\0‘;
i--;
//判断该标识符是否为保留字
for (n = 0; n < 100; n++)
{
if (strcmp(word pro[n]) == 0)
{
printf(“%s\t(%d-) 保留字\n“ pro[n] n + 1);
return 3;
}
}
//判断标识符长度是否超出规定
if (strlen(word)>10)
{
printf(“%s\t Lexical analyzer read Unlawful identifier“word);
return 0;
}
//判断该标识符是否存在标识符表中
int m = 0;
if (line != 0)
{
int q = 0;
while (q {
if (strcmp(word mark[q++]) == 0)
{
printf(“%s\t(12%d) 标识符\n“ word q);
return 3;
}
}
}
//将该标识符保存到标识符表中
strcpy(mark[line] word);
printf(“%s\t(12 %d) 标识符\n“ word line + 1);
line++;
return 3;
}
else if (a[i] >= ‘0‘ && a[i] <= ‘9‘) //分析常数
{
char x[100];
int n = 0 sum;
x[n++] = a[i++];
//判断字符是否是0~9
while (a[i] >= ‘0‘ && a[i] <= ‘9‘)
{
x[n++] = a[i++];
}
x[n] = ‘\0‘;
i--;
int num = atoi(x); //将字符串转换成int型
//判断该常数是否存在于常数表中
if (row != 0)
{
int y;
for (y = 0; y < 1000; y++)
{
int w = number[y][0];
sum = 0;
int d;
for (d = 1; d <= number[y][0]; d++)
{
w = w - 1;
sum = sum + number[y][d] * pow(2 w);
}
if (num == sum)
{
printf(“%d\t(13%d)\n“ num y + 1);
return 3;
}
}
}
int z = num c = num;
int m = 0;
do //计算是几位二进制数
{
z = z / 2;
m++;
} while (z != 0);
for (n = m; n > 0; n--) //将二进制保存于常数表中
{
number[row][n] =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6855 2018-04-30 11:44 主程序(改为cpp).cpp
文件 46 2018-04-30 11:45 使用说明.txt
相关资源
- 编译原理课程设计+报告用高级语言
- c++词法分析器
- 编译原理词法分析器 输入源程序 能生
- C MINUS 词法分析器
- 编译原理_词法分析器_C语言版_简单易
- 编译原理实验——词法分析器C语言编
- WinForm程序C++词法分析器
- 编译原理词法分析器实验报告
- 编译原理实验-词法分析器
- 词法分析器源代码(c/c++)
- 简单的词法分析器
- 编译原理大作业完整的词法分析器
- C语言 词法分析器 C#实现
- 词法分析器源代码
- 词法分析器c++版
- 一个简单的lex词法分析器
- C语言编程的词法分析器,可具体定位
- 词法分析器源代码C++
- C语言词法分析器_源代码
- c++实现词法分析器
- 词法分析器c语言实现
- 我用MFC写的词法分析器
- c语言 词法分析器实验报告及源代码
- 词法分析器C语言编写附实验报告
- c语言词法分析器(能够识别保留字,
- 词法分析器C语言手工生成
- 基于LEX的C语言词法分析器
- 利用LEX自动生成词法分析程序
- 实现词法分析器
- 实现词法分析器
评论
共有 条评论