1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 语法分析器c语言实验报告 词法分析实验报告(C++)..doc

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

时间:2021-11-17 15:53:35

相关推荐

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

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

词法分析实验报告

一、实验目的

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

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

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

二、实验内容

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

三、实验要求

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

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

3. 输出:对应的二元式

四、实验环境

Windows XP Professional SP3,Visual Studio

五、关键代码

// 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 ' ';

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。