O’ZBEKISTON RESPUBLIKASI OLIY VA O’RTA MAXSUS TA’LIM VAZIRLIGI
DENOV TADBIRKORLIK VA PEDAGOGIKA INSTITUTI
TADBIRKORLIK VA BOSHQARUV
FAKULTET
1 – bosqich 5KI – 2022 guruh talabasi
BOZOROV OG’ABEK NING
DASTURLASH
Fanidan
Bajardi: BOZOROV OG’ABEK
Qabul qildi: MAHMUDOV ZAYNIDDIN
Laboratoriya ishi №7. Mavzu: Sintaktis tahlil
Ishning maqsadi: C++ dasturlash tilida leksik va sintaksis tahlil qilish va uning dasturini yaratish ko’nikmalarini egallsh.
Masalaning qo’yilishi:
Matnli faylda berilgan ma’lumotlarni leksik va sintaksis tahlil qilish.
Masala:
Matinli faylda “ ; ” (nuqta-vergul) belgisi bilan ajratilgan arifmetik iboralar mavjud. Arifmetik ifodalar: identifikatorlardan, o'nlik suzuvchi nuqta raqamlaridan, o’zlashtirish belgisi ( = ), ishoralar +, -, *, / va figurali qavs({}) lardan iborat.
Topshiriqqa muvofiq kirish matnini leksik tahlilini bajaradigan va ularning turlarini ko'rsatgan holda tokenlar jadvalini tuzadigan dastur yozing. Dastur kirish matnida leksik tahlil bosqichida aniqlanishi mumkin bo'lgan xatolar (sintaksis tahlil) mavjudligi to'g'risida xabarlarni chiqarishi kerak;
leksik va sintaksis tahlil analizator kodini yaratishda Visual C++ dan kompilyator sifatida foydalaning.
Dastur matni:
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
int main(){
// matnli faylni o'qish uchun ochish 10.ifstream oqi("1.cpp"); 11.if(!oqi.is_open()){
12.cout<<"Fayl topilmadi"<14.int i=1; 15.string line, str;
16.bool s=0,s1=0, s2=0; int e1=0,e2=0; 17.int z2=0;
// fayl o'hirigacha o'qish
while (getline(oqi, line)) // qatorning ohirigacha o'qish 20.{
21.if(oqi.fail()) break; // faylda ma'lumotar tugashi 22.e1=0; e2=0; string h=""; int h2=0;
// fayldan o'zlashtirilgan qator ohirigacha o'qish
// Ushbu satrda vazifada berilgan aktiv belgilarni aniqlash 25.for(int t=0; t
26.s=0; s1=0; s2=0; e1=0; e2=0;
27.string d; d.assign(line,t,1); // line satrini xar bir elementini d ga o'zlashtirish 28.// leksik tahlil uchun
29.if(d=="=" || d=="+" || d=="-" || d=="*" || d=="/" ){ 30.// sintaksis tahlil uchun
31.if(line[t-1]=='+' || line[t-1]=='-' || line[t-1]=='*' || line[t-1]=='/' ){
32.if(d!="=" && (line[t-2]!='+' || line[t-2]!='-' || line[t-2]!='*' || line[t-2]!='/') ){ 33.cout<kelgan"<35.}
36.}
37.if(line[t+1]=='+' || line[t+1]=='-' || line[t+1]=='*' || line[t+1]=='/' ){ 38.// sintaksis tahlil uchun
39.if(d=="="){
40.cout<42.}
43.}
Do'stlaringiz bilan baham: |