html解析器编译原理,编译原理实验报告词法分析器(内含源代码).docx
編譯原理實驗報告詞法分析器(內含源代碼)
編譯原理實驗(一)
——詞法分析器
實驗描述
運行環境:vc++2008
對某特定語言A ,構造其詞法規則。
該語言的單詞符號包括:
1該程序能識別的單詞符號及類別說明表
單詞
類別
PROGRAM
0
NOT
1
BEGIN
2
IF
3
END
4
THEN
5
VAR
6
ELSE
7
INT
8
WHILE
9
AND
10
DO
11
OR
12
標識符
13
常數
14
+
15
-
16
(
17
)
18
,
19
;
20
=
21
<
22
>
23
*
24
**
25
>=
26
<=
27
!=
28
2狀態轉換圖
3程序流程:
詞法分析作成一個子程序,由另一個主程序調用,每次調用返回一個單詞對應的二元組,輸出標識符表、常數表由主程序來完成。
實驗目的
通過動手實踐,使學生對構造編譯系統的基本理論、編譯程序的基本結構有更為深入的理解和掌握;使學生掌握編譯程序設計的基本方法和步驟;能夠設計實現編譯系統的重要環節。同時增強編寫和調試程序的能力。
實驗任務
編制程序實現要求的功能,并能完成對測試樣例程序的分析。
實驗原理
char set[1000],str[500],strtaken[20];//set[]存儲代碼,strtaken[]存儲當前字符
char sign[50][10],constant[50][10];//存儲標識符和常量
定義了一個Analyzer類
class Analyzer{
public:
Analyzer();//構造函數 ~Analyzer();//析構函數
int IsLetter(char ch); //判斷是否是字母,是則返回 1,否則返回 0。
int IsDigit(char ch); //判斷是否為數字,是則返回 1,否則返回 0。
void GetChar(char *ch); //將下一個輸入字符讀到ch中。
void GetBC(char *ch); //檢查ch中的字符是否為空白,
若是,則調用GetChar直至ch進入一個非空白字符。
void Concat(char *strTaken, char *ch); //將ch中的字符連接到strToken之后。
int Reserve(char *strTaken); //對strTaken中的字符串查找保留字表,若是一個保留字返回它的數碼,否則返回0。
void Retract(char *ch) ; //將搜索指針器回調一個字符位置,將ch置為空白字符。
void input();//向存放輸入結果的字符數組輸入一句語句。
void display();//輸出一些程序結束字符顯示樣式
int analyzerSubFun();//詞法分析器子程序,為了實現詞法分析的主要功能。
代碼實現
// cifa.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "iostream"
using namespace std;
char set[1000],str[500],strtaken[20];//set[]存儲代碼,strtaken[]存儲當前字符
char sign[50][10],constant[50][10];//存儲標識符和常量
//int Words[500][10];
char ch;//當前讀入字符
int sr,to=0;//數組str, strtaken 的指針
int st=0,dcount=0;
int id=0;
static int line=1;
int h,l;
typedef struct Words /*放置二元組*/
{
int num;
char letters[20];
}DS;
DS Words[500];
typedef struct words
{
char word[20];
int type;
}WORDS;
WORDS words[]={
{"program",0},
{"not",1},
{"begin",2},
{"end",3},
{"if",4},
{"then",5},
{"var",6},
總結
以上是生活随笔為你收集整理的html解析器编译原理,编译原理实验报告词法分析器(内含源代码).docx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html怎么自动设为底部,让底部永远在页
- 下一篇: html判断数字数据的大小写,大小写字母