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

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

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

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

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

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

Синтаксичний аналіз

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

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

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

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Теорія трансляції
Група:
ПМ-32
Коротко про документ

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

У документі наведено виконання лабораторної роботи з теми синтаксичного аналізу. Описано побудову граматики та реалізовано фрагмент програми мовою C++.

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

  • Синтаксичний аналіз
  • Мови програмування
  • Лексичний аналіз
  • Граматика
  • Рекурсивний спуск

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

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

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

синтаксичний аналізграматикалексичний аналізрекурсивний спускPascalC++лексема

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

Міністерство освіти і науки України Національний університет ”Львівська політехніка”  ЛАБОРАТОРНА РОБОТА №2 на тему : “Синтаксичний аналіз,, Тема: Синтаксичний аналіз Мета: Побудувати граматику, яка породжує запропоновану підмножину мови програмування, визначити типи можливих помилок та форму відповідного повідомлення . Написати програму синтаксичного контролю метором рекурсивного ( низхідний аналіз спуску), попередньо застосувавши еквівалентні перетворення граматики (якщо потрібно). При потребі внести доповнення у підпрограму лексичного аналізу. Варіант №3 Завдання: Розглянути підмножину мови Pascal, у якій є ідентифікатори символів), цілі константи, які використовуються у операторах опису (типи змінних – real , integer), оператори присвоєння , умовні оператори (коротка форма, умова – одна операція порівняння або декілька порівнянь, об’єднаних за допомогою логічних операцій). Код програми: #include "stdafx.h" # include <stdio.h> # include <string> # include <iostream> # define lexsize 30 using namespace std; char lit, syn, lex[lexsize]; int cl, i; FILE *fr, *fw; void getlit(void); void scan(void); void main(void) { fr=fopen("1.txt", "r"); fw=fopen("2.txt", "w"); lit=' '; while (!feof(fr)) { scan(); if ((lit!=' ')&&(lit!='\n')&&(lit!='\t')) fprintf (fw, "%c\t%s\n", syn, lex); } fclose (fr); fclose (fw); } void scan(void) { i=0; while ((lit==' ')||(lit=='\n')||(lit=='\t')) {getlit( ); if(feof)return;} switch(cl) { case 1: lex[i++]=lit; getlit(); while(cl<=2) {lex[i++]=lit; getlit(); } lex[i]='\0'; if (i<=10) if (strcmp(lex,"begin")==0) syn='B'; else if (strcmp(lex,"end")==0) syn='E'; else if (strcmp(lex,"if")==0) syn='W'; else if (strcmp(lex,"then")==0) syn='D'; else if (strcmp(lex,"real")==0) syn='R'; else if (strcmp(lex,"integer")==0) syn='I'; else if (strcmp(lex,"or")==0) syn='O'; else if (strcmp(lex,"and")==0) syn='A'; else if (strcmp(lex,"not")==0) syn='N'; else if (strcmp(lex,"var")==0) syn='V'; else if (strcmp(lex,"program")==0) syn='P'; else syn='i'; else syn='e'; break; case 2: lex[i++]=lit; getlit(); while(cl==2) {lex[i++]=lit; getlit(); } lex[i]='\0'; if (i<=10) syn='c'; else syn='e'; break; case 3: lex[i++]=lit; lex[i++]='\0'; syn=lit; getlit(); break; case 4: lex[i++]=lit; syn=lit; getlit(); if (lit=='=') { lex[i++]=lit; syn='p'; getlit();} lex[i++]='\0'; break; case 5: lex[i++]=lit; syn='n'; getlit(); if (lit=='>'||lit=='=') {lex[i++]=lit; getlit(); } lex[i++]='\0'; break; case 6: lex[i++]=lit; syn='n'; getlit(); if (lit=='=') {lex[i++]=lit; getlit(); } lex[i++]='\0'; break; case 7: lex[0]=lit; lex[1]='\0'; syn='n'; getlit(); break; default: lex[0]=lit; lex[1]='\0'; syn='e'; getlit(); break; } } void getlit(void) { lit=fgetc(fr); cl=8; if (( lit>='a')&& ( lit<='z')|| ( lit>='A')&& ( lit<='Z'))cl=1; if (( lit>='0')&& ( lit<='9'))cl=2; if ((lit=='(')||( lit==')')|| ( lit==';')||( lit==',')||(lit=='+')|| ( lit=='-')|| ( lit=='*')||(lit=='/'))cl=3; if ( lit==':')cl=4; if ( lit=='<')cl=5; if ( lit=='>')cl=6; if ( lit=='=')cl=7; } Приклади:    Висновок: на цій лабораторній роботі я навчилась будувати граматику, яка породжує запропоновану підмножину мови програмування, визначати типи можливих помилок та форму відповідного повідомлення ,складати програму синтаксичного контролю метором рекурсивного ( низхідний аналіз спуску), попередньо застосувавши еквівалентні перетворення граматики (якщо потрібно).
Допоможи студентському архіву

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

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

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

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

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

Admin

26.02.2023 12:38

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