Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Математика
Група:
ПМ-31

Частина тексту файла (без зображень, графіків і формул):

Міністерствто освіти і науки України Національний університет “Львівська політехніка” Кафедра прикладної математики Звіт Лабораторна робота №2: Лексичний аналізатор Тема : Розглянути підмножину мови Pascal, у якій є ідентифікатори (довжина – не більше 10 символів), цілі константи (довжина – не більше 6 символів), дійсні константи з фіксованою крапкою ( довжина цілої частини – до 3 символів, дробової – до 5 символів), які використовуються у операторах опису (типи змінних – real , integer), оператори присвоєння, складні оператори (begin … end) умовні оператори (коротка форма, умова – одна операція порівняння). Код програми : using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; namespace SysProgLab2 { public partial class Form1 : Form { ArrayList list = new ArrayList(); string s; string[] service ={"and","begin","real","integer","var","program","or"}; string[] ssplit; public Form1() { InitializeComponent(); } private void button3_Click(object sender, EventArgs e) { listBox1.Items.Clear(); s = textBox1.Text; ssplit = s.Split(new char[] {'\r',',','\n',' ','<','>',':','=',';'},StringSplitOptions.RemoveEmptyEntries); foreach (string stemp in ssplit) { transefer(stemp); } for (int k = 1; k < s.Length; k++) { if (s[k] == '=') { if (!Char.IsDigit(s[k + 1]) && !char.IsLetter(s[k + 1])) Err(k); if (!Char.IsDigit(s[k - 1]) && !char.IsLetter(s[k - 1]) && s[k - 1] != '>' && s[k - 1] != '<' && s[k - 1] != ':') Err(k); } if (s[k] == ':') { if (s[k + 1] != '=' && s[k + 1] != 'r' && s[k + 1] != 'i') Err(k); if (!char.IsLetter(s[k - 1]) && !char.IsDigit(s[k - 1])) Err(k); } if (s[k] == '.') { if (!char.IsLetter(s[k + 1]) && !char.IsDigit(s[k + 1])) Err(k); if (!char.IsLetter(s[k - 1]) && !char.IsDigit(s[k - 1])) Err(k); } if (s[k] == '>') { if (!char.IsLetter(s[k + 1]) && !char.IsDigit(s[k + 1])&&s[k+1]!='=') Err(k); if (!char.IsLetter(s[k - 1]) && !char.IsDigit(s[k - 1])&&s[k-1]!='<') Err(k); } if (s[k] == '<') { if (!char.IsLetter(s[k + 1]) && !char.IsDigit(s[k + 1]) && s[k + 1] != '=' && s[k - 1] != '<') Err(k); if (!char.IsLetter(s[k - 1]) && !char.IsDigit(s[k - 1]) ) Err(k); } } public bool isIndef(char[] ch) { if (ch[0] != '_' && !Char.IsLetter(ch[0])) return false; if (ch[0] == '_' && !char.IsLetter(ch[1])) return false; for (int i = 1; i < ch.Length; i++) { if (!char.IsLetter(ch[i]) && !char.IsDigit(ch[i]) && ch[i] != '_') return false; } return true; } public void Err(int i) { if (MessageBox.Show("Error in statement", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK) { textBox1.Focus(); textBox1.Select(i, 1); } } public bool isDConst(char[] ch) { int pr = 0; if (!char.IsDigit(ch[0])) return false; for (int i = 1; i < ch.Length; i++) { if (ch[i] == '.') pr++; if (!char.IsDigit(ch[i])&&ch[i]!='.') return false; if (ch[i] == '.' && pr > 1) return false; } if (pr == 0) return false; return true; } public bool isCConst(char[] ch) { for (int i = 0; i < ch.Length; i++) if (!char.IsDigit(ch[i])) return false; return t } public bool isService(string ch) { bool pr = false; for (int i = 0; i < service.Length; i++) { if (ch == service[i]) pr = true; } return pr; } public void transefer(string s) { bool prapor=true; foreach (string sk in list) { if (s == sk) prapor = false; } list.Add(s); if (prapor) { prapor = false; if (isService(s)) { listBox1.Items.Add(s + " -> slyzhbove slovo"); } else if (isIndef(s.ToCharArray())) if (s.Length <= 10) listBox1.Items.Add(s + " -> identuficator"); else listBox1.Items.Add(s + " -> identuficator z perevuschenjam"); if (isCConst(s.ToCharArray())) if (s.Length <= 6) listBox1.Items.Add(s + " -> cila konstanta"); else listBox1.Items.Add(s + " -> cila konstanta z perevuschenjam"); if (isDConst(s.ToCharArray())) { string s1 = ""; string s2 = ""; if (s.Split('.')[0].Length > 3) s1 = " perev. cil."; if (s.Split('.')[1].Length > 5) s2 = " perev. drob."; listBox1.Items.Add(s + " -> Drobova const. " + s1 + s2); s1 = ""; s2 = ""; } } } private void button1_Click(object sender, EventArgs e) { StreamReader sr = new StreamReader(Application.StartupPath + "\\code.txt"); textBox1.Text = sr.ReadToEnd(); sr.Close(); } private void button2_Click(object sender, EventArgs e) { StreamWriter sw = new StreamWriter(Application.StartupPath + "\\outcode.txt"); foreach (string str in listBox1.Items) { sw.WriteLine(str); } sw.Close(); } } } Контрольний приклад :  Висновок : у даній лаборвторній роботі я навчився програмувати лексичний аналізатор і розбивати на лексеми.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!