形式語言與自動機:實驗二——DFA識別句子
一、實驗目的:
加深對DFA工作原理的理解。
二、實驗內容:
1.設計固定DFA。也就是說用if-then-else(一般用來實現字母表中只有兩個字母的情況)、switch(大於兩個字母的情況)、for(用於控制輸入字串,長度為n的字串,for迴圈n次)等語句表示DFA。一個函式定義一個DFA;
2.設計檔案形式儲存DFA。設計檔案格式,DFA動態生成,使用字串來驗證DFA的有效性和正確性;(使用物件導向的方法。對於k個狀態的DFA,生成相應的k個狀態物件;狀態轉換應通過物件間的訊息傳遞來實現)
3.圖形化表示。用java或者VC中圖形功能實現圖形化的dfa。(選作)
三、程式程式碼
package xing3;
import java.io.IOException;
import java.util.Scanner;
import java.io.*;
public class Test2 {
static String Q[]=new String[100]; //記錄狀態
static char A[]=new char[100]; //記錄符號字母表
static String T[]=new String[100]; //記錄狀態轉移函式
static String S=null; //記錄開始符
static String F[]=new String[100]; //記錄終止狀態
static int LenGth; //記錄狀態轉移函式的個數
static String Str=null;
static String Start(String str,char c) {
for(int i=0;i<LenGth;i++) {
if(str.equals(T[i].subSequence(1, 3))==true && c==T[i].charAt(4)) {
System.out.println(T[i]);
return T[i].substring(7, 9);
}
}
return null;
}
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
int len_F = 0;
Scanner in = new Scanner(System.in);
BufferedReader filereader = new BufferedReader(new FileReader("Read2.txt"));
int Leng = 1;
String Temp;
int t = 0; // 記錄產生式的個數
while ((Temp = filereader.readLine()) != null) {
Leng++;
}
Leng--;
BufferedReader filereade = new BufferedReader(new FileReader("Read2.txt"));
int Len = 1;
while ((Temp = filereade.readLine()) != null) {
if (Len == 1) {
int p = 0;
int begin = 3;
int end;
for (int i = 3; i < Temp.length(); i += 2) {
if (Temp.charAt(i) == ','||Temp.charAt(i) == '}') {
end = i;
Q[p++] = Temp.substring(begin, end);
begin = i + 1;
}
}
}
if (Len == 2) {
int p = 0;
for (int i = 3; i < Temp.length(); i += 2) {
A[p++] = Temp.charAt(i);
}
}
if (Len > 3 && Len <= Leng - 2) {
T[t++] = Temp;
}
if (Len == Leng - 1) {
S = Temp.substring(3, 5);
}
if (Len == Leng) { //終止
int p = 0;
int begin = 3;
int end;
for (int i = 3; i < Temp.length(); i += 2) {
if (Temp.charAt(i) == ','||Temp.charAt(i) == '}') {
end = i;
F[p++] = Temp.substring(begin, end);
begin = i + 1;
}
}
len_F=p;
}
Len++;
} // while
System.out.println("輸出狀態產生式:");
for(int i=0;i<t;i++)
System.out.println(T[i]);
LenGth = t;
System.out.println("輸入k個狀態:");
Str = in.next();
String str1 = S;
for (int i = 0; i < Str.length(); i++) {
String str2 = Start(str1, Str.charAt(i));
str1 = str2;
}
int flag=1;
for(int i=0;i<len_F;i++) {
if(str1.equals(F[i])) {
System.out.println("狀態可以被DFA識別!");
flag=0;
}
}
if(flag==1) {
System.out.println("狀態不可以被DFA識別!");
}
}
}
四、執行結果
檔案:
相關文章
- 自己實現一個 DFA 串模式識別器(二)模式
- C語言實驗二C語言
- 使用 Forth 實現驗證碼識別與自動化登入
- 使用 Crystal 實現驗證碼識別與自動化登入
- 使用 C++ 實現驗證碼識別與自動化登入C++
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- 自己實現一個 DFA 串模式識別器(一)模式
- Python驗證碼自動識別Python
- 動態語言與鴨子型別型別
- 用C語言實現有限狀態自動機FSMC語言
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- c語言程式設計——實驗報告二C語言程式設計
- 活動 Web 頁面人機識別驗證的探索與實踐Web
- 形式語言[1090]
- C 語言Struct 實現執行型別識別 RTTIStruct型別
- 利用 D 程式語言實現文字識別程式
- 機器學習對於語言類比的理解與識別機器學習
- java 自動化與 python 自動化哪種程式語言吃香?JavaPython
- C語言實驗1C語言
- python實現自動提取句子中的關鍵字Python
- C語言-識別符號命名C語言符號
- SpeechRecognition麥克風語言識別
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- [Object-C語言隨筆之二] 《NSLog》常用的列印除錯語句與自動排版ObjectC語言除錯
- 使用有限狀態自動機實現C語言的宣告解析器C語言
- IJCAI 2018 利用跨語言知識改進稀缺資源語言命名實體識別AI
- 模式識別與機器學習(二)模式機器學習
- 微調大型語言模型進行命名實體識別模型
- 使用 R 語言實現簡單的文字識別程式
- 以$t形式使用flutter多語言Flutter
- c語言程式實驗————實驗報告十二C語言
- c語言程式實驗——實驗報告五C語言
- c語言程式實驗————實驗報告十C語言
- Python 語言特性:編譯+解釋、動態型別語言、動態語言Python編譯型別
- C語言實驗作業C語言
- GO語言————4.1 檔名、關鍵字與識別符號Go符號
- 識別浮點常量問題(編譯原理實驗二)編譯原理
- 與 C 語言長別離