语法分析器c语言实验报告,词法分析实验报告(C++)..doc

该实验报告详细介绍了使用C++编写C语言词法分析器的过程,目标是掌握词法分析原理和设计。程序能读取C语言源代码,识别保留字、标识符、常量、算符和界符,并输出对应的二元式。关键代码展示了如何初始化保留字表并进行保留字查找。
摘要由CSDN通过智能技术生成

词法分析实验报告(C).

词法分析实验报告

一、实验目的

1. 掌握词法分析的原理。

2. 熟悉保留字表等相关的数据结构与单词的分类方法。

3. 掌握词法分析器的设计与调试。

二、实验内容

根据编译中的分词原理,用C++语言编写一个C语言的词法分析程序:.

三、实验要求

1. 输入:任意一个C语言程序的源代码。

2. 处理:对输入进行分析,分离出保留字、标识符、常量、算符和界符。

3. 输出:对应的二元式

四、实验环境

Windows XP Professional SP3,Visual Studio 2010

五、关键代码

// Scanner.cpp

#include "stdafx.h"

#include "CuteC.h"

#include "Scanner.h"

#include "CuteCView.h"

int CScanner::m_constListIndex=0;

int CScanner::g_place=0;

// CScanner

IMPLEMENT_DYNAMIC(CScanner, CWnd)

CScanner::CScanner()

{

}

CScanner::CScanner(CString str)

{

//初始化保留字

reservedWords[0].str=L"void";

reservedWords[0].tok=tokentype::_VOID;

reservedWords[1].str=L"char";

reservedWords[1].tok=tokentype::CHAR;

reservedWords[2].str=L"const";

reservedWords[2].tok=tokentype::_CONST;

reservedWords[3].str=L"double";

reservedWords[3].tok=tokentype::DOUBLE;

reservedWords[4].str=L"else";

reservedWords[4].tok=tokentype::ELSE;

reservedWords[5].str=L"float";

reservedWords[5].tok=tokentype::FLOAT;

reservedWords[6].str=L"for";

reservedWords[6].tok=tokentype::FOR;

reservedWords[7].str=L"if";

reservedWords[7].tok=tokentype::IF;

reservedWords[8].str=L"int";

reservedWords[8].tok=tokentype::INT;

reservedWords[9].str=L"main";

reservedWords[9].tok=tokentype::MAIN;

reservedWords[10].str=L"scanf";

reservedWords[10].tok=tokentype::SCANF;

reservedWords[11].str=L"printf";

reservedWords[11].tok=tokentype::PRINTF;

reservedWords[12].str=L"while";

reservedWords[12].tok=tokentype::WHILE;

m_error=FALSE;

m_strText=str;

m_nLength=m_strText.GetLength();

m_cChar=m_strText.GetBuffer(m_nLength);//数组化字符串

m_nCount=0;

m_row=1;

m_col=0;

}

CScanner::~CScanner()

{

}

BEGIN_MESSAGE_MAP(CScanner, CWnd)

END_MESSAGE_MAP()

// 检查标识符是不是保留字,是就返回保留字类型

CScanner::tokentype CScanner::reservedlookup(CString str)

{

for(int i=0;i<13;i++)

{

if(str==reservedWords[i].str)

return reservedWords[i].tok;

}

return tokentype::ID;

}

// 取下一个字符

wchar_t CScanner::getnextchar(void)

{

if(m_nCount>=m_nLength)

{

m_nCount++;

return ' ';

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值