c语言简直词法编译器,C-minus语言编译器的词法分析部分

1.[文件] scanner.cpp ~ 29KB     下载(47)

2.[文件] resource.h ~ 387B     下载(29)

//{{NO_DEPENDENCIES}}

// Microsoft Visual C++ generated include file.

// Used by bianyiqi.rc

// 新对象的下一组默认值

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_NEXT_RESOURCE_VALUE 101

#define _APS_NEXT_COMMAND_VALUE 40001

#define _APS_NEXT_CONTROL_VALUE 1001

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

3.[文件] globals.h ~ 2KB     下载(27)

/*编译器的全局类型和变量,应在其他包含文件之前*/

/* 如已经联入头文件globals.h则不再联入 */

#ifndef _GLOBALS_H_

#define _GLOBALS_H_

/****** globals.h所包含头文件 ******/

#include "stdio.h"

#include "stdlib.h"

/* 定义常量FALSE为0 */

#ifndef FALSE

#define FALSE 0

#endif

/* 定义常量TRUE为1 */

#ifndef TRUE

#define TRUE 1

#endif

/* 定义保留字数量常量MAXRESERVED为21 */

#define MAXRESERVED 9

/* MAXTOKENLEN为单词最大长度定义为40 */

#define MAXTOKENLEN 40

/*初始化符号表中变量的偏移*/

#define INITOFF 7

/* SCOPESIZE为符号表scope栈的大小*/

#define SCOPESIZE 1000

/*定义token的长度*/

#define TOKENLEN sizeof (TokenType)

/*定义链表节点的长度*/

#define CHAINNODELEN sizeof (ChainNodeType)

/********************** 单词的词法类型 ********************/

typedef enum

{

/* 保留字 */

INT, ELSE, RETURN, VOID, IF, WHILE, READ, WRITE, MAIN,

/* 特殊符号 */

ID, NUM,EEOF, ERROR, NONE,

/*简单运算符*/

ASSIGN/* = */, PLUS/* + */, MINUS/* - */, TIMES/* * */, DIV/* @ */,

MOD/* % */, LT/* < */, GT/* > */,

/*复杂运算符*/

EQ/* == */, NEQ/* != */,NGT/* <= */, NLT/* >= */,

/*标点符号*/

LPARAN, RPARAN/* ( ) */, LBRACE, RBRACE/* { } */, LSQUARE, RSQUARE/* [ ] */,

COMMA/* , */, SEMI/* ; */,ZHUSHI /* / */,

} LexType;

/*********** 单词的类型,包括词法信息和语义信息 ************/

typedef struct tokenType

{

int lineshow;

LexType Lex;

char Sem[MAXTOKENLEN+1];

} TokenType;

/***********链表的结点类型,包括Token部分和指针部分**********/

typedef struct node

{

TokenType Token; //单词

struct node *nextToken; //指向下一个单词的指针

} ChainNodeType;

/********************************************************************/

/* 源代码文本文件指针source */

extern FILE *source;

/* 列表输出文件指针listing */

extern FILE* listing;

/*词法分析结果Token序列的存储文件指针fp*/

extern FILE* fp;

/*Token序列中的token数目*/

extern int Tokennum;

/*清单的行号*/

extern int lineno;

/********************************************************************/

/* 源程序追踪标志,如果该标志为TRUE *

* 语法分析时将源程序行号写入列表文件listing */

extern int EchoSource;

/* 错误追踪标志,如果该标志为TRUE *

* 防止错误产生时进一步传递错误 */

extern int Error;

#endif

4.[文件] util.h ~ 386B     下载(26)

/* 如已经联入该头文件util.h则不再联入 */

#ifndef _UTIL_H_

#define _UTIL_H_

void printTokenlist( ); //显示词法分析结果函数

void ChainToFile (ChainNodeType *p);//显示一个单词

//void ReadNextToken(TokenType *p);//将文件tokenlist中的信息作为返回值进行输出

//char * copyString(char * s);/* 字符串复制函数 该函数为已存在的字串分配内存单元,并将其复制*/

#endif

5.[文件] 1.txt ~ 405B     下载(24)

/我的测试用例/

/仅用于一般测试/

void main(){

int num[9] = {3,5,5,7,6,8,90,6,54};

int dem = 9;/kj/

int i = 0;

while(i<9){

if(num[i]<= dem)

num[i]= dem;

else if(num[i] >= dem)

num[i]= dem-1;

else if(num[i]!= dem)

num[i]= dem*2;

else if(num[i]== dem)

num[i] = dem@3;

i++;

}

i = i%3;

read(i);

write(i);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值