DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота №2: Лексичний аналізатоÑ

Оригінальна назва роботи

Лабораторна робота №2: Лексичний аналізатор

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

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

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

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

Про що ця робота

Звіт до лабораторної роботи присвячено розробці лексичного аналізатора для підмножини мови Pascal. Продемонстровано реалізацію програми на C# для розбиття тексту на лексеми.

У роботі розглядаються

  • Лексичний аналіз
  • Компілятори
  • Мова програмування Pascal
  • Обробка рядків
  • Програмування на C#
  • Токенізація

Зміст і розділи

  1. Тема
  2. Код програми
  3. Контрольний приклад
  4. Висновок
Для кого:Студенти технічних спеціальностей та викладачі
Викладачі:Не вказано

Ключові поняття

лексемаконстантаPascalC#символалгоритмкод програми

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

Міністерствто освіти і науки України Національний університет “Львівська політехніка” Кафедра прикладної математики Звіт Лабораторна робота №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(); } } } Контрольний приклад :  Висновок : у даній лаборвторній роботі я навчився програмувати лексичний аналізатор і розбивати на лексеми.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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