资源简介
含有lex生成词法分析,手工构造词法分析,手工构造语法分析!含源码和报告
代码片段和文件信息
#include
#include
#include
#include
#include
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
FILE * source;
FILE * listing;
#define MAXRESERVED 6
#define MAXTOKENLEN 40
#define BUFLEN 256
char lineBuf[BUFLEN];
char tokenstring[MAXTOKENLEN+1];
int lineno=0;
int linepos = 0;
int bufsize = 0;
int EOF_Flag = FALSE;
int EchoSource = TRUE;
int TraceScan = TRUE;
typedef enum
{
ENDFILEERROR
/*reserved words*/
ELSEIFINTRETURNVOIDWHILE
/*token*/
IDNUM
/*special symbols*/
ASSIGNEQLTGTGEPLUSMINUSTIMESOVERLPARENRPARENSEMILENECOMMALBRACERBRACELBRACKETRBRACKET
}TokenType;
typedef enum
{
STARTINEQINLEINNEINGEINCOMMENTINNUMINIDDONEINOVERIN_COMMENT
}StateType;
static struct
{
char* str;
TokenType tok;
}reservedWords[MAXRESERVED]
={{“if“IF}{“else“ELSE}{“int“INT}{“return“RETURN}{“void“VOID}{“while“WHILE}};
void printToken(TokenType tokenchar * tokenstring)
{
switch (token)
{
case IF:
case ELSE:
case INT:
case VOID:
case WHILE:
case RETURN:
fprintf(listing“reserved word: %s\n“tokenstring);
break;
case ASSIGN:fprintf(listing“ASSIGN:%s\n“tokenstring);
break;
case LT: fprintf(listing“LT:%s\n“tokenstring);
break;
case LE: fprintf(listing“LE:%s\n“tokenstring);
break;
case NE: fprintf(listing“NE:%s\n“tokenstring);
break;
case EQ: fprintf(listing“EQ:%s\n“tokenstring);
break;
case PLUS: fprintf(listing“PLUS:%s\n“tokenstring);
break;
case MINUS: fprintf(listing“MINUS:%s\n“tokenstring);
break;
case TIMES: fprintf(listing“TIMES:%s\n“tokenstring);
break;
case OVER: fprintf(listing“OVER:%s\n“tokenstring);
break;
case LPAREN: fprintf(listing“LPAREN: %s\n“tokenstring);
break;
case RPAREN: fprintf(listing“RPAREN:%s\n“tokenstring);
break;
case GT: fprintf(listing“GT:%s\n“tokenstring);
break;
case GE: fprintf(listing“GE:%s\n“tokenstring);
break;
case COMMA: fprintf(listing“COMMA:%s\n“tokenstring);
break;
case LBRACE: fprintf(listing“LBRACE:%s\n“tokenstring);
break;
case RBRACE: fprintf(listing“RBRACE:%s\n“tokenstring);
break;
case LBRACKET: fprintf(listing“LBRACKET:%s\n“tokenstring);
break;
case RBRACKET: fprintf(listing“RBRACKET:%s\n“tokenstring);
break;
case SEMI: fprintf(listing“SEMI:%s\n“tokenstring);
break;
case ENDFILE: fprintf(listing“EOF\n“);
break;
case NUM:
fprintf(listing“NUMval=%s\n“tokenstring);
break;
case ID:
fprintf(listing“IDname=%s\n“tokenstring);
break;
case ERROR:
fprintf(listing“ERROR:%s\n“tokenstring);
break;
default:
fprintf(listing“Unknown token:%d\n“token);
}
}
static int getNextChar(void)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 236352 2012-05-15 14:41 pro\com.rar
文件 213033 2012-05-21 22:56 pro\lex\Debug\lex.exe
文件 238464 2012-05-21 22:56 pro\lex\Debug\lex.ilk
文件 157508 2012-05-21 22:56 pro\lex\Debug\lex.pch
文件 484352 2012-05-21 22:56 pro\lex\Debug\lex.pdb
文件 19528 2012-05-21 22:56 pro\lex\Debug\mylexer.obj
文件 33792 2012-05-30 00:08 pro\lex\Debug\vc60.idb
文件 45056 2012-05-21 22:56 pro\lex\Debug\vc60.pdb
文件 109 2012-05-08 16:07 pro\lex\in.txt
文件 4491 2012-05-21 22:57 pro\lex\lex.dsp
文件 512 2012-05-21 22:57 pro\lex\lex.dsw
文件 41984 2012-05-30 00:14 pro\lex\lex.ncb
文件 48640 2012-05-30 00:14 pro\lex\lex.opt
文件 240 2012-05-30 00:08 pro\lex\lex.plg
文件 82124 2012-06-01 00:01 pro\lex_词法分析.docx
文件 304346 2012-06-01 00:01 pro\lex_词法分析.pdf
文件 22623 2012-05-11 13:45 pro\lyl\Debug\first.obj
文件 196650 2012-05-11 13:45 pro\lyl\Debug\lyl.exe
文件 222752 2012-05-11 13:45 pro\lyl\Debug\lyl.ilk
文件 239328 2012-05-11 13:45 pro\lyl\Debug\lyl.pch
文件 525312 2012-05-11 13:45 pro\lyl\Debug\lyl.pdb
文件 33792 2012-05-29 23:08 pro\lyl\Debug\vc60.idb
文件 53248 2012-05-11 13:45 pro\lyl\Debug\vc60.pdb
文件 7542 2012-05-11 12:52 pro\lyl\first.cpp
文件 109 2012-05-08 16:07 pro\lyl\in.txt
文件 4250 2012-04-23 21:11 pro\lyl\lyl.dsp
文件 514 2012-04-23 21:09 pro\lyl\lyl.dsw
文件 41984 2012-05-29 23:31 pro\lyl\lyl.ncb
文件 48640 2012-05-29 23:31 pro\lyl\lyl.opt
文件 240 2012-05-29 23:08 pro\lyl\lyl.plg
............此处省略41个文件信息
- 上一篇:QT二级菜单
- 下一篇:采用ATMEGA8制作USB转串口
评论
共有 条评论