編譯原理pl 0 c語言版 pl0 h檔案

2021-06-27 01:34:45 字數 3381 閱讀 5237

#include # define norw 13                 /*關鍵字個數*/

# define txmax 100 /*名字表容量*/

# define nmax 14 /*number的最大位數*/

# define al 10 /*符號的最大長度*/

# define amax 2047 /*位址上界*/

# define levmax 3 /*最大允許過程巢狀宣告層數[0,lexmax]*/

# define cxmax 200 /*最多的虛擬機器**數*/

/*符號*/

enum symbol;

#define symnum 32

/*-------------*/

enum object;

/*--------------*/

enum fct;

#define fctnum 8

/*--------------*/

struct instruction

;file *fas;

file *fa;

file *fa1;

file *fa2;

bool tableswitch;

bool listswitch;

char ch;

enum symbol sym;

char id[al + 1];

int num;

int cc, ll;

int cx;

char line[81];

char a[al + 1];

struct instruction code[cxmax];

char word[norw][al];

enum symbol wsym[norw];

enum symbol ssym[256];

char mnemonic[fctnum][5];

bool declbegsys[symnum];

bool statbegsys[symnum];

bool facbegsys[symnum];

/*------------------------------*/

struct tablestruct

;struct tablestruct table[txmax]; /*名字表*/

file * fin;

file* fout;

char fname[al];

int err; /*錯誤計數器*/

/*當函式中會發生fatal error時,返回-1告知呼叫它的函式,最終退出程式*/

#define getsymdo if(-1==getsym())return -1

#define getchdo if(-1==getch())return -1

#define testdo(a,b,c) if(-1==test(a,b,c))return -1

#define gendo(a,b,c) if(-1==gen(a,b,c))return -1

#define expressiondo(a,b,c) if(-1==expression(a,b,c))return -1

#define factordo(a,b,c) if(-1==factor(a,b,c))return -1

#define termdo(a,b,c) if(-1==term(a,b,c))return -1

#define conditiondo(a,b,c) if(-1==condition(a,b,c))return -1

#define statementdo(a,b,c) if(-1==statement(a,b,c))return -1

#define constdeclarationdo(a,b,c) if(-1==constdeclaration(a,b,c))return -1

#define vardeclarationdo(a,b,c) if(-1==vardeclaration(a,b,c))return -1

void error(int n);

int getsym();

int getch();

void init();

int gen(enum fct x, int y, int z);

int test(bool*s1, bool*s2, int n);

int inset(int e, bool*s);

int addset(bool*sr, bool*s1, bool*s2, int n);

int subset(bool*sr, bool*s1, bool*s2, int n);

int mulset(bool*sr, bool*s1, bool*s2, int n);

int block(int lev, int tx, bool* fsys);

void interpret();

int factor(bool* fsys, int* ptx, int lev);

int term(bool*fsys, int*ptx, int lev);

int condition(bool*fsys, int*ptx, int lev);

int expression(bool*fsys, int*ptx, int lev);

int statement(bool*fsys, int*ptx, int lev);

void listcode(int cx0);

int vardeclaration(int* ptx, int lev, int* pdx);

int constdeclaration(int* ptx, int lev, int* pdx);

int position(char* idt, int tx);

void enter(enum object k, int* ptx, int lev, int* pdx);

int base(int l, int* s, int b);

編譯原理 PL 0語言詞法分析

輸入pl 0語言源程式 輸出二元式序列,單詞種類,單詞的值 該語言的保留字,識別符號以及數字可用乙個狀態機來識別,其餘符號可用乙個單獨的狀態機來識別。正規式如下 字母開頭 letter letter digit 數字開頭 digit digit 符號省略 將正規式轉換為dfa 首先,規定幾個變數與函...

編譯原理 實驗1 PL 0語言詞法分析

pl 0語言詞法分析 一 實驗目的 通過完成詞法分析程式,了解詞法分析的過程。編制乙個讀單詞程式,對pl 0 語言進行詞法分析,把輸入的字串形式的源程式分割成乙個個單詞符號,即基本保留字 識別符號 常數 運算子 界符五大類。二 實驗環境 作業系統 window xp 編寫環境 visual c c ...

編譯原理實驗(一)PL 0 語言詞法分析

pl 0語言詞法分析 一 實驗目的 通過完成詞法分析程式,了解詞法分析的過程。編制乙個讀單詞程式,對pl 0 語言進行詞法分析,把輸入的字串形式的源程式分割成乙個個單詞符號,即基本保留字 識別符號 常數 運算子 界符五大類。二 實驗環境 作業系統 window xp 編寫環境 visual c c ...