詞法分析程式設計

2021-09-29 08:41:44 字數 2374 閱讀 9090

【實驗內容】

對乙個簡單語言的子集編制乙個一遍掃瞄的詞法分析程式。

【實驗要求】

(1)待分析的簡單語言的詞法

1) 關鍵字

begin if then while do end

2) 運算子和界符

:= + - * / < <= > >= <> = ; ( ) #

3) 其他單詞是識別符號(id)和整形常數(num),通過以下正規式定義:

id=letter(letter|digit)*

num=digitdigit*

4) 空格由空白、製表符和換行符組成。空格一般用來分隔id、num、運算子、界符和關鍵字,詞法分析階段通常被忽略。 

單詞符號

種別碼單詞符號

種別碼begin1:

17if2:=

18then

3< 

20while

4<> 

21do

5<=

22end

6> 

23letter(letter|digit)*

10>=

24digitdigit*11=

25+13;

26-14(

27*15)

28/16#

0

寫的比較雜

public class test ;

static mapmap = new hashmap<>();

//單詞種別碼

static int syn;

//單詞自身字串

static string token;

//指向字元位數

static int p;

//輸入字元

static string prog;

public static void main(string args)

system.out.println("\n please input string:");

scanner sc=new scanner(system.in);

prog=sc.nextline();

p=0; //字元位數初值

do }while(syn!=0);

} static void scan()

//關鍵字,識別符號判斷

if(ch>='0' && ch<='9' || ch>='a' && ch<='z')

token=prog.substring(s1,p);

//和關鍵字表比較

if(token.equals(map.get(1)))

syn=1;

else if(token.equals(map.get(2)))

syn=2;

else if(token.equals(map.get(3)))

syn=3;

else if(token.equals(map.get(4)))

syn=4;

else if(token.equals(map.get(5)))

syn=5;

else if(token.equals(map.get(6)))

syn=6;

else //非關鍵字,識別符號

syn=10;

} else //數字判斷

if(ch>='0' && ch<='9')

token=prog.substring(s1,p);

}else //其他符號判斷

switch(ch)

p++;

break;

case '<':

p++;

ch = prog.charat(p);

if(ch=='>')

syn=21;

if(ch=='=')

syn=22;

else

p++;

break;

case '>':

p++;

ch = prog.charat(p);

if(ch=='=')

syn=24;

else

p++;

break;

case '=':syn=25;

p++;break;

case ';':syn=26;

p++;break;

case '(':syn=27;

p++;break;

case ')':syn=28;

p++;break;

case '#':syn=0;

p++;break;

default:syn=-1;

break;}}

}

詞法分析程式設計

實驗目的 1 理解詞法分析在編譯程式中的作用 2 加深對有窮自動機模型的理解 3 掌握詞法分析程式的實現方法和技術 實驗內容 對下述單詞表定義的語言設計編制乙個詞法分析器。各種單詞符號對應的種別碼如下表 單詞符號 種別編碼 begin1if 2then 3while4do 5end 6l l d 1...

編譯原理 詞法分析程式設計

一 實驗目的 設計 編制並除錯乙個簡單語言cp compiler principle 的詞法分析程式,加深對詞法分析原理的理解。二 實驗內容 說明 1 cp語言是大小寫敏感語言 2 字母為a za z,數字為0 9 3 學有餘力同學可以在上述詞法要求基礎上進行擴充和改造 4 每行 中從 開始的部分為...

Sicily 1000 詞法分析程式設計

description input 輸入一程式,結束符用 output 輸出單詞數對 類號,序號 輸出識別符號表,用空格分隔 輸出無符號整數表,用空格分隔 sample input main sample output 1,1 3,0 3,1 3,2 1,0 4,0 2,2 5,0 3,4 4,1 ...