-
Notifications
You must be signed in to change notification settings - Fork 0
/
AFD.cs
56 lines (47 loc) · 1.98 KB
/
AFD.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace Teoria_Computacional {
public partial class AFD : Form {
frmInicio frmInicio;
Automata automate = new Automata();
public AFD (frmInicio main) {
InitializeComponent();
frmInicio = main;
}
private void btnOpenFile_Click (object sender, EventArgs e) {
if(OFAFD.ShowDialog()==DialogResult.OK) {
JObject afd_obj = JObject.Parse(File.ReadAllText(@OFAFD.FileName));
this.automate.Estado_Inicial = afd_obj.GetValue("Estado_Inicial").ToString();
this.automate.Estados_Aceptacion = afd_obj.GetValue("Estados_Aceptacion").ToObject<string[]>();
this.automate.Trans = afd_obj.GetValue("Trans").ToObject<Transicion[]>();
txtCadena.Enabled=true;
}
}
private void btnBack_Click (object sender, EventArgs e) {
this.Close();
frmInicio.Show();
}
private void btnValidate_Click (object sender, EventArgs e) {
string cadena = txtCadena.Text;
string estado_actual = this.automate.Estado_Inicial;
foreach(char caracter in cadena) {
List<Transicion> transiciones = new List<Transicion>();
foreach(Transicion transicion in this.automate.Trans) {
if(transicion.Inicio==estado_actual) {
transiciones.Add(transicion);
}
}
foreach (Transicion transt in transiciones) {
if (transt.Valor.Equals(caracter.ToString())) {
estado_actual=transt.Siguiente[0];
}
}
}
lblResult.Text=this.automate.Estados_Aceptacion.Contains(estado_actual) ? "La cadena es valida" : "La cadena es invalida";
}
}
}