资源简介
编译原理消除无用产生式的文法化简。用C++写的,实现消除无用产生式。
代码片段和文件信息
#include
#include “parser.h“
#include
#include
#include
#include
#include
#include
char sourcefile[FILENAME_LENGTH];
FILE *in = (FILE *) 0 *out = (FILE *) 0;
FILE *str=(FILE*)0;
//至命错误--退出
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 2
#endif
void fatal_error( const char msg[] ){
fprintf( stderr “%s\n“ msg );
exit( EXIT_FAILURE );
}
void local_init();
void local_end();
static int _stdcall act_identity(char&c);
static int _stdcall act_comment2(char&c);
static int _stdcall act_string(char&c);
static int _stdcall act_comment1(char&c);
static int _stdcall act_chinese(char&c);
static int _stdcall act_number(char&cint state);
static void *flex_alloc ( unsigned int );
static void *flex_realloc ( void * unsigned int );
static void flex_free ( void * );
static TUPLE result_tuple;
static int linenum=1;
static int stringpos;
static int init = 1;
#ifdef USER_INIT
#undef USER_INIT
#endif
#define USER_INIT local_init()
#ifdef USER_END
#undef USER_END
#endif
#define USER_END local_end()
struct buffer_state{
FILE *input_file;
char *ch_buf; //输入缓冲区
char *buf_pos; //输入缓冲区的当前位置
unsigned int buf_size; //输入缓冲区的大小不包括结束标志
int n_chars; //输入缓冲区中字符数目不包括结束标志
int is_our_buffer; //是否拥有这个缓冲区同智能指针的解决方案
int is_interactive; //是否是交互式的输入源如果是控制台则input_file为空
int at_bol; //是否在行开始
int fill_buffer; //如果缓冲区数据用完是否读入新的数据如果为0的话表示文件结束
int buffer_status; //缓冲区状态下面有定义
#define BUFFER_NEW 0
#define BUFFER_NORMAL 1
#define BUFFER_EOF_PENDING 2
};
typedef struct buffer_state *BUFFER_STATE;
#define END_OF_BUFFER_CHAR 0 //结束标志
#define BUF_SIZE 1024 //定义缓冲区大小
#define READ_BUF_SIZE 1024
//当前缓冲区和它的窗口变量
static BUFFER_STATE current_buffer = 0;
#define CURRENT_BUFFER current_buffer
static char hold_char;
static int n_chars;
#define MORE_ADJ 0
static char *text;
static char *c_buf_p = (char *) 0;
void load_buffer_state( void ){
n_chars = current_buffer->n_chars;
text = c_buf_p = current_buffer->buf_pos;
in = current_buffer->input_file;
hold_char = *c_buf_p;
}
//使b中的所有数据失效如果b为当前缓冲区则重新装载窗口变量
void flush_buffer( BUFFER_STATE b ){
if ( ! b )
return;
b->n_chars = 0;
b->ch_buf[0] = END_OF_BUFFER_CHAR;
b->ch_buf[1] = END_OF_BUFFER_CHAR;
b->buf_pos = &b->ch_buf[0];
b->at_bol = 1;
b->buffer_status = BUFFER_NEW;
if ( b == current_buffer )
load_buffer_state();
}
//使b无效把file放入b中
void init_buffer( BUFFER_STATE b FILE *file ){
flush_buffer( b );
b->input_file = file;
b->fill_buffer = 1;
b->is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
}
//创建一个包装好的缓冲区(filesize)
BUFFER_STATE create_buffer( FILE *file int size ){
BUFFER_STATE b;
b = (BUFFER_STATE) flex_alloc( sizeof( struct buffer_state ) );
if ( ! b )
fatal_error( “out of dynamic memory in create_buffer()“ );
b->buf_size = size;
b->ch_buf = (char *)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 761 2003-04-28 21:44 文法化简\Pascalex\example.pas
文件 92 2007-12-14 14:55 文法化简\Pascalex\example.str
文件 871 2007-12-14 10:58 文法化简\Pascalex\example1.pas
文件 2169 2007-12-14 14:55 文法化简\Pascalex\out.txt
文件 17707 2007-12-14 08:58 文法化简\Pascalex\parser.cpp
文件 1754 2007-12-13 10:25 文法化简\Pascalex\parser.h
文件 789 2007-12-14 10:17 文法化简\Pascalex\pascal.cpp
文件 3529 2007-12-14 10:30 文法化简\Pascalex\pascal.dsp
文件 537 2007-12-13 19:50 文法化简\Pascalex\pascal.dsw
文件 761 2003-04-28 21:44 文法化简\Pascalex\test2.pas
文件 190 2007-12-13 12:12 文法化简\文法化简\common.h
文件 188 2007-12-14 12:05 文法化简\文法化简\grammer.out.txt
文件 71 2007-12-13 16:31 文法化简\文法化简\grammer.txt
文件 169 2007-12-14 12:11 文法化简\文法化简\grammer1.txt
文件 100 2007-12-14 11:11 文法化简\文法化简\grammer2.out.txt
文件 15457 2007-12-14 14:49 文法化简\文法化简\main.c
文件 3375 2011-03-06 12:57 文法化简\文法化简\main.dsp
文件 9181 2007-12-14 14:43 文法化简\文法化简\Production.h
文件 3286 2007-12-14 11:27 文法化简\文法化简\SymbolSet.h
文件 4486 2007-12-13 11:01 文法化简\文法化简\文法化简.dsp
文件 541 2007-11-25 11:34 文法化简\文法化简\文法化简.dsw
文件 149 2007-12-14 14:53 文法化简\文法化简\消除单产生式.txt
文件 129 2007-12-14 14:53 文法化简\文法化简\消除无用产生式.txt
文件 120 2007-12-14 14:53 文法化简\文法化简\消除空产生式.txt
目录 0 2011-03-14 22:51 文法化简\文法化简\Debug
目录 0 2011-03-14 22:51 文法化简\Pascalex
目录 0 2011-03-14 22:51 文法化简\文法化简
目录 0 2011-03-14 22:51 文法化简
----------- --------- ---------- ----- ----
66412 28
............此处省略1个文件信息
评论
共有 条评论