91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

編譯原理實驗四--語法分析程序。參照TINY語言的語法分析程序,完成了對C-語言的語法分析

資源截圖

代碼片段和文件信息

#include
#include?
#include?
#include?

#define?MAXRESERVED?6?//關鍵字最大程度?
#define?MAXTOKENLEN?40?//標識符最大長度?
#define?BUFLEN?256
#define?TRUE?1
#define?FALSE?0
static?char?lineBuf[BUFLEN];?/*讀取一行字符保存?*/
static?int?linepos?=?0;?/*?指示緩存中第幾個字符?*/
static?int?bufsize?=?0;?/*?當前緩存中字符串長度?*/
static?int?EOF_flag?=?FALSE;?/*?錯誤標識?*/

/*?allocate?global?variables?*/
int?lineno?=?0;
FILE?*?source;?//讀入文件?
FILE?*?listing;?//output?file?
//FILE?*?code;
/*?allocate?and?set?tracing?flags?*/
int?EchoSource?=?TRUE;
int?TraceScan?=?TRUE;
int?TraceParse?=?TRUE;
int?TraceAnalyze?=?FALSE;
int?TraceCode?=?FALSE;
int?Error?=?FALSE;


static?void?syntaxError(char?*?message)?
{??
?fprintf(listing“\n>>>?“);?
?fprintf(listing“Syntax?error?at?line?%d:?%s“linenomessage);?
??Error?=?TRUE;?
}?
typedef?enum?//枚舉類型,保存詞素類型
????/*?book-keeping?tokens?*/
???{ENDFILEERROR
????/*?reserved?words?*/
????IFELSEINTRETURNVOIDWHILE
????/*?multicharacter?tokens?*/
????IDNUM
????/*?special?symbols?*/
????LBRKRBRKLBRACERBRACEGTELTENEQEQASSIGNLTGTPLUSMINUSTIMESOVERLPARENRPARENSEMICOMMA
???}?TokenType;
static?TokenType?token;?/*?holds?current?token?*/
static?struct?//關鍵字字結構,方便查詢?
????{?char*?str;
??????TokenType?tok;
????}?reservedWords[MAXRESERVED]
???=?{{“if“IF}{“int“INT}{“else“ELSE}{“return“RETURN}
??????{“void“VOID}{“while“WHILE}};
typedef?enum?//枚舉類型,保存狀態
???{?STARTINRCOMINLCOMINCOMMENTINNUMINIDDONEINLTEINGTEINEEQINNEQ}
???StateType;
char?tokenString[MAXTOKENLEN+1];?//保存標識符

//節點類型?
typedef?enum?{IntK?IdK?VoidK?ConstK?Var_DeclK?Arry_DeclK?FunK?ParamsK??
ParamK?CompK?Selection_StmtK?Iteration_StmtK?Return_StmtK?AssignK?OpK??
Arry_ElemK?CallK?ArgsK?UnkownK}?NodeKind;?
//表達式類型?
typedef?enum?{VoidInteger}?ExpType;?

???
//const?int?max_child?=?4;?
//treeNode定義?包括子節點、兄弟節點、所處行號、節點類型、屬性、表達式返回類型?
typedef?struct?treeNode?
{?
struct?treeNode?*??child[4];?
struct?treeNode?*??sibling;?
int?lineno;?
NodeKind?nodekind;?
//union?{StmtKind?stmtExpT?};?
union?{?TokenType?op;?int?val;?const?char?*?name;}?attr;?
ExpType?type;?
}?TreeNode;?
TreeNode?*?parse(void);?
TreeNode?*?declaration_list(void);?
TreeNode?*?declaration(void);?
TreeNode?*?params(void);?
TreeNode?*?param_list(TreeNode?*?k);?
TreeNode?*?param(TreeNode?*?k);?
TreeNode?*?compound_stmt(void);?
TreeNode?*?local_declaration(void);?
TreeNode?*?statement_list(void);?
TreeNode?*?statement(void);??
TreeNode?*?expression_stmt(void);?
TreeNode?*?selection_stmt(void);?
TreeNode?*?iteration_stmt(void);?
TreeNode?*?return_stmt(void);?
TreeNode?*?expression(void);?
TreeNode?*?var(void);?
TreeNode?*?simple_expression(TreeNode?*?k);?
TreeNode?*?additive_expression(TreeNode?*?k);?
TreeNode?*?term(TreeNode?*?k);?
TreeNode?*?factor(TreeNode?*?k);??
TreeNode?*?call(TreeNode?*?k);?
TreeNode?*?args(void);?

static?int?getNextChar(void)//獲取緩存中下一個字符
{?if?

評論

共有 條評論