• 大小: 22KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签:

资源简介

编译原理消除无用产生式的文法化简。用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个文件信息

评论

共有 条评论

相关资源