【實驗內容】
對乙個簡單語言的子集編制乙個一遍掃瞄的詞法分析程式。
【實驗要求】
(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 ...