Инструментальная среда имитационного моделирования распределенных систем мобильных агентов



страница9/21
Дата07.03.2016
Размер2.3 Mb.
1   ...   5   6   7   8   9   10   11   12   ...   21

Приложение 13 Form1_io.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Reflection;


namespace Automata {

public partial class Form1: Form {

void save_model() {

if(m == null) {

log(ml["model_undef"]/*"Модель не определена!"*/);

return;


}

SaveFileDialog d = new SaveFileDialog();

DialogResult rez = d.ShowDialog();

if(rez != DialogResult.OK) return;

log(ml["save_in_file"]/*"Сохраняем в файл "*/ + d.FileName);

using(StreamWriter sw = File.CreateText(d.FileName)) {

wr = sw;

write_model();

}

status(ml["file_is_saved"]/*"Файл сохранен"*/);



}
StreamWriter wr;
void sp() {

wr.WriteLine("");

}

void sp(string s1, string s2) {



wr.WriteLine(s1 + "(" + s2.Replace(' ','_') + ")");

}

void sp(string s1, string s2,string s3) {



wr.WriteLine(s1 + "(" + s2.Replace(' ','_') + "," + s3.Replace(' ','_') + ")");

}

void sp(string s1, string s2, string s3, string s4) {



wr.WriteLine(s1 + "(" + s2.Replace(' ', '_')

+ "," + s3.Replace(' ', '_') + "," + s4.Replace(' ', '_') + ")");

}
void write_model() {
sp("model", m.name);

sp();
foreach(Place p in m.p_list) {

sp("place",p.name);

}

foreach(Place p in m.p_list) {



foreach(Arc a in p.list_in) {

sp("arc_in",p.name,a.p.name,a.port.name);

}

foreach(Arc a in p.list_out) {



sp("arc_out",p.name,a.p.name,a.port.name);

}

}



foreach(Type t in m.t_list) {

sp();


sp("type", t.name);

if(t.initial_state != null) {

sp(" state", t.initial_state.name);

}

foreach(Const c in t.list_const) {



sp(" const", c.name);

}

foreach(Var v in t.list_var) {



sp(" var", v.name);

}

foreach(Port port in t.list_port) {



sp(" port", port.name);

}

foreach(Transition trans in t.list_trans) {



sp(" trans", trans.state_from.name, trans.state_to.name);

if(trans.priority != Transition.default_priority) {

sp(" priority", ""+trans.priority);

}

if(trans.duration_max != Transition.default_duration) {



if(trans.duration_max == trans.duration_min) {

sp(" duration", ""+trans.duration_min);

} else {

sp(" duration", ""+trans.duration_min,""+trans.duration_max);

}

}

foreach(Term term in trans.list_term_in) {



sp(" term_in", term.port.name, term.res.name);

}

foreach(Term term in trans.list_term_out) {



sp(" term_out", term.port.name, term.res.name);

}

}



}

foreach(Place p in m.p_list) {

sp();

sp("place", p.name);



foreach(Instance inst in p.list_inst) {

if(inst.current_state == null) {

sp(" inst", inst.con.name);

} else {


sp(" inst", inst.con.name,inst.current_state.name);

}

}



}

}
string trda_file_name = "";


void load_model() {

if(m != null) {

if(!confirm(ml["del_cur_model"]/*"Удалить текущую модель?"*/)) return;

}

log(ml["loading_new_model..."]/*"Загружаем новую модель ..."*/);



OpenFileDialog d = new OpenFileDialog();

DialogResult rez = d.ShowDialog();

if(rez != DialogResult.OK) return;

log(ml["loading_new_model_from_file"]/*"Загружаем новую модель из файла "*/+d.FileName);


m = new Model(ml["new model"]/*"Новая модель"*/);

int n_err = 0;


multy_alarm_on();
using(StreamReader sr = File.OpenText(d.FileName)) {

string line = "";

int n_str = 0;

comment_deep = 0;

while ((line = sr.ReadLine()) != null) {

n_str++;


log("sou("+n_str+")="+line);

if (!scan_blank(line, n_str)) {

n_err++;

if (n_err > 5) {

alarm(ml["too_many_errors_in_input_file"]/*"Слишком много ошибок во входном файле."*/);

break;


}

}

}



}

if(n_err == 0){

m.fix_marking();

model_ready(ml["model_is_loaded"]/*"модель загружена"*/);

this.Text = ml["TRDA_typed_model"]/*"Модель типа TRDA "*/ + d.SafeFileName;

this.trda_file_name = d.FileName;

}else{

status(ml["model_is_not_loaded"]/*"Модель не загружена"*/);



m = null;

model_not_ready();

}
multy_alarm_off();

}
int comment_deep = 0;


bool scan_blank(string ss,int n_str) {

Char[] null_c_list = null;

bool rez = true;

foreach(string s in ss.Split(null_c_list,StringSplitOptions.RemoveEmptyEntries) ){

log("==>"+s);

if (!scan(s, n_str, ss)) {

rez = false;

}

}



return rez;

}
bool scan(string ss, int n_str, string sou) {

Char[] delim = {'(',',',')',';'};

string[] s_list = ss.Split(delim, StringSplitOptions.RemoveEmptyEntries);

foreach(string s in s_list) {

log("---->" + s);

}

try {


if(s_list[0] == "/*") {

comment_deep++;

log("----> /* deep=" + comment_deep);

return true;

}

if(s_list[0] == "*/") {



comment_deep--;

log("----> */ deep="+comment_deep);

return true;

}

if(comment_deep > 0) return true;



if(comment_deep < 0) {

error(ml["unopened comment id closed"]/*"закрыт не открытый комиментарий"*/);

}

decode(s_list, n_str, sou);



return true;

} catch(Exception e) {

log("n_str=" + n_str + ": " + sou);

log("decode_error: " + e.Message );

string err_msg = e.Message;

if(e.InnerException != null) {

log("innerException: " + e.InnerException.Message);

err_msg = e.InnerException.Message;

}

alarm("decode_error in "+s_list[0]+": " + err_msg);



return false;

}

}


void decode(string[] sl, int n_str, string sou) {

System.Type t = m.GetType();


int n = sl.Length;
Object[] pars = null;

System.Type[] types = null;

if(n > 1) {

pars = new Object[n - 1];

types = new System.Type[n - 1];

for(int i = 1; i < n; i++) {

pars[i - 1] = sl[i];

types[i-1]=typeof(string);

}

}
string func_name = sl[0];



if(func_name.Equals("const")) {

func_name = "dconst";

} else if(func_name.Equals("var")) {

func_name = "dvar";

} else if(func_name.Equals("time")) {

func_name = "duration";

}

MethodInfo method = t.GetMethod(func_name,types);


method.Invoke(m, pars);

}

}



}



Каталог: data -> 2013
2013 -> Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки «Журналистика»
2013 -> Программа дисциплины концепции и концептуальный анализ в математике и гуманитарном знании
2013 -> "Применение инструментов конкурентной разведки для анализа конкурентоспособности компании"
2013 -> Программа учебной дисциплины «Психология»
2013 -> Сетевой образовательный клуб «Некрасовская республика»: самоорганизация, саморазвитие, сотворчество. «Некрасовская республика»
2013 -> Информационное сопровождение бизнес проектов


Поделитесь с Вашими друзьями:
1   ...   5   6   7   8   9   10   11   12   ...   21


База данных защищена авторским правом ©uverenniy.ru 2019
обратиться к администрации

    Главная страница