-
大小: 22KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
編譯原理消除無用產(chǎn)生式的文法化簡(jiǎn)。用C++寫的,實(shí)現(xiàn)消除無用產(chǎn)生式。

代碼片段和文件信息
#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;
//至命錯(cuò)誤--退出
#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; //輸入緩沖區(qū)
char?*buf_pos; //輸入緩沖區(qū)的當(dāng)前位置
unsigned?int?buf_size; //輸入緩沖區(qū)的大小不包括結(jié)束標(biāo)志
int?n_chars; //輸入緩沖區(qū)中字符數(shù)目不包括結(jié)束標(biāo)志
int?is_our_buffer; //是否擁有這個(gè)緩沖區(qū)同智能指針的解決方案
int?is_interactive; //是否是交互式的輸入源如果是控制臺(tái)則input_file為空
int?at_bol; //是否在行開始
int?fill_buffer; //如果緩沖區(qū)數(shù)據(jù)用完是否讀入新的數(shù)據(jù)如果為0的話表示文件結(jié)束
int?buffer_status; //緩沖區(qū)狀態(tài)下面有定義
#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 //結(jié)束標(biāo)志
#define?BUF_SIZE ?1024 //定義緩沖區(qū)大小
#define?READ_BUF_SIZE?1024
//當(dāng)前緩沖區(qū)和它的窗口變量
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中的所有數(shù)據(jù)失效如果b為當(dāng)前緩沖區(qū)則重新裝載窗口變量
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;
}
//創(chuàng)建一個(gè)包裝好的緩沖區(qū)(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?*)?
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????761??2003-04-28?21:44??文法化簡(jiǎn)\Pascalex\example.pas
?????文件?????????92??2007-12-14?14:55??文法化簡(jiǎn)\Pascalex\example.str
?????文件????????871??2007-12-14?10:58??文法化簡(jiǎn)\Pascalex\example1.pas
?????文件???????2169??2007-12-14?14:55??文法化簡(jiǎn)\Pascalex\out.txt
?????文件??????17707??2007-12-14?08:58??文法化簡(jiǎn)\Pascalex\parser.cpp
?????文件???????1754??2007-12-13?10:25??文法化簡(jiǎn)\Pascalex\parser.h
?????文件????????789??2007-12-14?10:17??文法化簡(jiǎn)\Pascalex\pascal.cpp
?????文件???????3529??2007-12-14?10:30??文法化簡(jiǎn)\Pascalex\pascal.dsp
?????文件????????537??2007-12-13?19:50??文法化簡(jiǎn)\Pascalex\pascal.dsw
?????文件????????761??2003-04-28?21:44??文法化簡(jiǎn)\Pascalex\test2.pas
?????文件????????190??2007-12-13?12:12??文法化簡(jiǎn)\文法化簡(jiǎn)\common.h
?????文件????????188??2007-12-14?12:05??文法化簡(jiǎn)\文法化簡(jiǎn)\grammer.out.txt
?????文件?????????71??2007-12-13?16:31??文法化簡(jiǎn)\文法化簡(jiǎn)\grammer.txt
?????文件????????169??2007-12-14?12:11??文法化簡(jiǎn)\文法化簡(jiǎn)\grammer1.txt
?????文件????????100??2007-12-14?11:11??文法化簡(jiǎn)\文法化簡(jiǎn)\grammer2.out.txt
?????文件??????15457??2007-12-14?14:49??文法化簡(jiǎn)\文法化簡(jiǎn)\main.c
?????文件???????3375??2011-03-06?12:57??文法化簡(jiǎn)\文法化簡(jiǎn)\main.dsp
?????文件???????9181??2007-12-14?14:43??文法化簡(jiǎn)\文法化簡(jiǎn)\Production.h
?????文件???????3286??2007-12-14?11:27??文法化簡(jiǎn)\文法化簡(jiǎn)\SymbolSet.h
?????文件???????4486??2007-12-13?11:01??文法化簡(jiǎn)\文法化簡(jiǎn)\文法化簡(jiǎn).dsp
?????文件????????541??2007-11-25?11:34??文法化簡(jiǎn)\文法化簡(jiǎn)\文法化簡(jiǎn).dsw
?????文件????????149??2007-12-14?14:53??文法化簡(jiǎn)\文法化簡(jiǎn)\消除單產(chǎn)生式.txt
?????文件????????129??2007-12-14?14:53??文法化簡(jiǎn)\文法化簡(jiǎn)\消除無用產(chǎn)生式.txt
?????文件????????120??2007-12-14?14:53??文法化簡(jiǎn)\文法化簡(jiǎn)\消除空產(chǎn)生式.txt
?????目錄??????????0??2011-03-14?22:51??文法化簡(jiǎn)\文法化簡(jiǎn)\Debug
?????目錄??????????0??2011-03-14?22:51??文法化簡(jiǎn)\Pascalex
?????目錄??????????0??2011-03-14?22:51??文法化簡(jiǎn)\文法化簡(jiǎn)
?????目錄??????????0??2011-03-14?22:51??文法化簡(jiǎn)
-----------?---------??----------?-----??----
????????????????66412????????????????????28
............此處省略1個(gè)文件信息
評(píng)論
共有 條評(píng)論