Главная

Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Пояснения к выполнению курсовой работы


 

Постановка задачи.Составить программу на Си для лексического анализа программы на модифицированном языке SPL. Вывести в файл "getrez.dan" и на экран таблицу идентификаторов и их адресов.

Программа на модифицированном языке SPL (вычисляет xy)


exp(a,b)

begin int z;

z=1;

while b do

if b%2 then z=z*a end;

a=a*a;b=b/2

end;

return z

end

main()

begin int x,y;

read x;

read y;

print exp(x,y)

end


 

#include<stdio.h>

#include<stdlib.h>

#include<ctype.h>

#include<conio.h>

#include<alloc.h>

#include<string.h>

/*Коды лексем языка SPL*/

enum{BEGINL=257,ENDL,IFL,THENL,WHILEL,DOL,RETRL,READL,PRITL,INTL,CONSTL,IDEN,NUMB};

int nst=0;

int lval,lex;

static char nch='\n';

FILE*PF,*padres;

 

void get(void);

void number(void);

void word(void);

char*add(char*nm);

 

void main(int ac,char*av[])

{

clrscr();

if(!ac)

puts("Hет исходного файла");

PF=fopen(av[1],"r");

padres=fopen("getrez.dan","w");

 

if(!PF)

puts("Файл не открывается");

else

get();

}

Void get()

{

while(nch!=EOF)

{

while(isspace(nch))

{

if(nch=='\n')

nst++;

nch=getc(PF);

}

if(isdigit(nch))

number();

else

if(isalpha(nch))

word();

else

if(nch=='('||nch==')'||nch==','||nch==';'||nch=='='||nch=='+'||nch=='-'||nch=='*'||nch=='/'||nch=='%')

{

lex=nch;

nch=getc(PF);

}

}

if(nch==EOF)

lex=EOF;

else

puts("Hедопустимый символ");

return;

}

Void number()

{

for(lval=0;isdigit(nch);nch=getc(PF))

lval=lval*10+nch-'0';

lex=NUMB;

return;

}

void word()

{

static int cdl[]={BEGINL,ENDL,IFL,THENL,WHILEL,DOL,RETRL,READL,

PRITL,INTL,CONSTL,IDEN,NUMB};

static char*serv[]={"begin","end","if","then","while","do","return","read",

"print","int","const"};

int i;

char tx[40];

char*p;

for(p=tx;isdigit(nch)||isalpha(nch);nch=getc(PF))

*(p++)=nch;

*p='\0';

for(i=0;i<11;i++)

if(strcmp(tx,serv[i])==0)

{

lex=cdl[i];

return;

}

lex=IDEN;

lval=(int)add(tx);

printf("Адрес для %s =%p\n",tx,lval);

fprintf(padres,"Адрес для %s =%p\n",tx,lval);

 

return;

}

char TNM[400];

char*ptn=TNM;

 

char*add(char*nm)

{

char*p;

for(p=TNM;p<ptn;p+=strlen(p)+1)

if(strcmp(p,nm)==0)

return p;

if((ptn+=strlen(nm)+1)>TNM+400)

{

puts("Переполнение таблицы");

exit(0);

}

return(strcpy(p,nm));

}

 

 

Образец результата работы программы

Адрес для exp =0586

Адрес для a =058B

Адрес для b =058D

Адрес для z =058F

Адрес для z =058F

Адрес для b =058D

И т. д.


Пример выполнения курсовой работы

Вариант задания курсовой работы

 

Составить программу на Си для лексического анализа программы на модифицированном языке SPL,в котором все ключевые слова переведены на русский язык и вместо begin и end используются соответственно левая и правая фигурные скобки. Вывести в файл и на экран таблицу идентификаторов и их адресов.

Вариант программы на модифицированном языке SPL (вычисляет xy), где по условию задачи все ключевые слова заменены на соответствующие на русском языке, а вместо begin и end используются соответственно { и }


 


exp(a,b)

{

целый z;

z=1;

пока b делать

если b%2 тогда z=z*a };

a=a*a;b=b/2

};

возврат z

}

main()

{

целый x,y;

читать x;

читать y;

печатать exp(x,y) }


 

Замечание: жирным шрифтом выделены изменения, которые необходимо внести в предыдущую программу, согласно варианту задания.

 

 

#include<stdio.h>

#include<stdlib.h>

#include<ctype.h>

#include<conio.h>

#include<alloc.h>

#include<string.h>

/*Коды лексем языка SPL*/

enum{BEGINL=257,ENDL,IFL,THENL,WHILEL,DOL,RETRL,READL,PRITL,INTL,CONSTL,IDEN,NUMB};

int nst=0;

int lval,lex;

static char nch='\n';

FILE*PF,*padres;

 

void get(void);

void number(void);

void word(void);

char*add(char*nm);

int isalpharus(char c);

int isspace1(char c);

int isdigit1(char c);

 

void main(int ac,char*av[])

{

clrscr();

if(!ac)

puts("Hет исходного файла");

PF=fopen(av[1],"r");

padres=fopen("getrez.dan","w");

 

if(!PF)

puts("Файл не открывается");

else

get();

}

Void get()

{

while(nch!=EOF)

{

while(isspace1(nch))

{

if(nch=='\n')

nst++;

nch=getc(PF);

}

if(isdigit1(nch))

number();

else

if(isalpharus(nch))

word();

else

if(nch=='('||nch==')'||nch==','||nch==';'||nch=='='||nch=='+'||nch=='-'||nch=='*'||nch=='/'||nch=='%'||nch=='{'||nch=='}')

{

lex=nch;

nch=getc(PF);

}

}

if(nch==EOF)

lex=EOF;

else

puts("Hедопустимый символ");

return;

}

Void number()

{

for(lval=0;isdigit1(nch);nch=getc(PF))

lval=lval*10+nch-'0';

lex=NUMB;

return;

}

void word()

{

static int cdl[]={BEGINL,ENDL,IFL,THENL,WHILEL,DOL,RETRL,READL,

PRITL,INTL,CONSTL,IDEN,NUMB};

static char*serv[]={"{","}","если","тогда","пока","делать","возврат","читать","печатать","целый","const"};

int i;

char tx[40];

char*p,*add();

for(p=tx;isdigit1(nch)||isalpharus(nch);nch=getc(PF))

*(p++)=nch;

*p='\0';

for(i=0;i<11;i++)

if(strcmp(tx,serv[i])==0)

{

lex=cdl[i];

return;

}

lex=IDEN;

lval=(int)add(tx);

printf("Адрес для %s =%p\n",tx,lval);

fprintf(padres,"Адрес для %s =%p\n",tx,lval);

 

return;

}

char TNM[400];

char*ptn=TNM;

 

char*add(char*nm)

{

char*p,*strcpy();

for(p=TNM;p<ptn;p+=strlen(p)+1)

if(strcmp(p,nm)==0)

return p;

if((ptn+=strlen(nm)+1)>TNM+400)

{

puts("Переполнение таблицы");

exit(0);

}

return(strcpy(p,nm));

}

/* Добавляем к исходной программе функции пользователя для распознавания букв, специальных знаков и цифр */

int isalpharus(char c)

{

int v;

if(isalpha(c)||c=='а'||c=='б'||c=='в'||c=='г'||c=='д'||c=='е'

||c=='ж'||c=='з'||c=='д'||c=='е'||c=='ж'||c=='з'||c=='и'|| c=='й'||c=='к'||c=='л'||c=='м'||c=='н'||c=='о'||c=='п'|| c=='р'||c=='с'||c=='т'||c=='у'||c=='ф'||c=='х'||c=='ц'||c=='ч'||c=='ш'||c=='щ'||c=='ы'||c=='э'||c=='ю'||c=='я'||c== 'ь')

v=8;

Else

v=0;

return v;

}

int isspace1(char c)

{

int v;

if(c=='\ '||c=='\n'||c=='\t'||c=='\f')

v=1;

Else

v=0;

return v;

}

int isdigit1(char c)

{

int v;

if(c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9')

v=2;

Else

v=0;

return v;

}


Варианты заданий для курсовой работы

 

Вариант 1

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL,в котором все ключевые слова переведены на русский язык и вместо begin и end используются соответственно левая и правая фигурные скобки. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 2

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL,в котором все ключевые слова переведены на украинский язык и вместо begin и end используются соответственно левая и правая фигурные скобки. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 3

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на русский язык и вместо begin и end используются слова start и finish. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

 


Вариант 4

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова переведены на украинский язык и вместо begin и end bиспользуются слова start и finish. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 5

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на русский язык, а вместо Int используется Var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 6

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова переведены на украинский язык и вместо слова NUMB используется DIGIT. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 7

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова BEGIN, END, READ, PRINT заменены соответствующими словами на русском языке, а вместо int используется var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 8

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL,в котором ключевые слова WHILE, DO, END, IF, THEN переведены на русский язык, а точка с запятой заменена двоеточием. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 9

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на русский и вместо точки с запятой используется символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 10

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на украинский язык, а вместо Int используется Var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 11

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова BEGIN, END, READ, PRINT переведены на русский язык, а вместо точки с запятой используется символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 12

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова RETURN, IF, THEN, WHILE, DO переведены на украинский язык, а вместо END используется символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 13

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова WHILE, DO, END, IF, THEN переведены на украинский язык, а вместо int используется слово var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 14

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на украинский язык, а вместо точки с запятой используется символ ^. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

 

Вариант 15

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором BEGIN, END заменены на { и }, а все остальные ключевые слова переведены на украинский язык. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 16

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова переведены на русский язык, а вместо точки с запятой используется символ #. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 17

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке, в котором BEGIN и END заменены соответственно на {и }, а READ, PRINT, RETURN переведены на русский язык. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 18

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова read,print,return переведены на украинский язык, а вместо end служит символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 19

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором BEGIN, END заменены соответственно на { и }, а все остальные ключевые слова переведены на русский язык. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 20

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL,в котором ключевые слова переведены на украинский язык, а вместо точки с запятой используется символ #. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 21

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на русский язык, а вместо Int используется Var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

 

Вариант 22

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова переведены на украинский язык и вместо слова NUMB используется DIGIT. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 23

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова BEGIN, END, READ, PRINT заменены соответствующими словами на русском языке, а вместо int используется var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 24

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова WHILE, DO, END, IF, THEN переведены на русский язык, а точка с запятой заменена двоеточием. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 25

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором переведены на русский язык и вместо точки с запятой используется символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 26

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором все ключевые слова переведены на украинский язык, а вместо Int используется Var. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 27

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова BEGIN, END, READ, PRINT переведены на русский язык, а вместо точки с запятой используется символ @. Вывести в файл и на экран таблицу идентификаторов и их адресов.

 

Вариант 28

Составить программу на Си для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова RETURN, IF, THEN, WHILE, DO переведены на украинский язык, а вместо END используется символ @.

 

Вариант 29

Составить программу на СИ для лексического и синтаксического анализов программы на модифицированном языке SPL, в котором ключевые слова WHILE, DO, END, IF, THEN переведены на украинский язык, а вместо int используется слово var.

 

 


Вариант 30

Составить программу на Си для лексического анализа программы на модифицированном языке SPL, в котором все ключевые слова переведены на украинский язык, а вместо точки с запятой используется символ ^.

 

6. 3 Требования к оформлению курсовой работы

Курсовая работа должна содержать:

1) титульный лист (с указанием номера варианта);

2) постановку задачи;

3) пояснительную записку:

o задача лексического анализа;

o задача синтаксического анализа;

o понятие лексемы;

o понятие „регулярное выражение”;

o кратко описать назначение функций лексического анализа: (get(); number(); word(); add(char*nm));

o записать регулярные выражения для своего варианта;

o инструкция пользователю (как запустить программу на выполнение);

4) текст программы на SPL;

5) текст программы на Cи;

6) таблицу идентификаторов и их адресов (файл getres.dan);

7) выводы (чему научились, где можно применить);

8) список литература.

 

Вопросы к экзамену

 

Экзаменационный билет включает два вопроса: первый - вопрос по теории, второй - составить программу языком системного программирования Си. Задача на программирование подобна тем, которые имели место в контрольной работе по дисциплине „Алгоритмические языки”.

 

1 Структура программного обеспечения ЭВМ. Назначение системных программ.

2 Формальные языки: алфавит, операции над символами, слово и определение формального языка.

3 Регулярные выражения: определение, примеры. Грамматика, правила вывода цепочек.

4 Расширенные грамматики. Пример определения формального языка, который описывается заданной грамматикой.

5 Задача анализа цепочки символов. Стратегии анализа. Пример.

6 Синтаксические диаграммы: определение, условия для LA(1)-анализа. Правила прохождения дуг синтаксической диаграммы.

7 Трансляторы: назначение, типы трансляторов. Структура и проходы компилятора.

8 Алгоритмический язык SPL: символы, переменные, константы, служебные слова, функции.

9 Лексический анализ: определение лексемы, виды лексем, которые различаются при анализе текста на алгоритмическом языке.

10 Структура главной функции интерпретатора для языка SPL.

11 Структура функции get() интерпретатора для языка SPL.

12 Структура функции number() интерпретатора для языка SPL.

13 Структура функции word() интерпретатора для языка SPL.

14 Структура функции add() интерпретатора для языка SPL.

15 Полный синтаксис языка SPL.

16 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа PROG.

17 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа DCONST.

18 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа CONS.

19 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа DVARB.

20 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа DFUNC.

21 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа PARAM.

22 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа BODY.

23 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа STML.

24 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа STAT.

25 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа EXPR.

26 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа TERM.

27 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа FACT.

28 Написать регулярное выражение, синтаксическую диаграмму и соответствующую функцию для нетерминального символа FCTL.

 


Список литературы

1. Проценко В.С., Чаленко П.Й., Ставровський А.Б. Техніка програмування мовою Сі.- Київ: «Либідь», 1993.

2. Керниган Б., Ритчи Д. Язык программирования Си.-, М.: Финансы и статистика, 1992.


Учебное пособие по дисциплине «Системное программирование и операционные системы» для студентов всех специальностей заочной формы обучения / Составители: А.Н. Скаковская, В.В. Авраменко – Сумы: изд-во СумГУ, 2006. – 96 с.

 

Кафедра информатики


Учебное издание

 

Учебное пособие

 

по дисциплине «Системное программирование и операционные системы»

для студентов всех специальностей

заочной формы обучения

 

 

Составители: Алла Николаевна Скаковская

Виктор Васильевич Авраменко

Редактор Н.О. Кравченко

Ответственный за выпуск Владимир Александрович Любчак

 

Подп. в печ. , поз

Формат 60х84/16. Ус. печать. лист. Тираж 150 пр. Зам. № Бумага офс. Печать офс. Обл.-изд. лист.  

 

Издательство СумГУ при Сумском государственном университете

40007, г. Сумы, ул. Р.-Корсакова, 2

свидетельство о внесение объекта издательского дела к Государственному реестру ДК №2365 от 08.12.2005.

Напечатано в типографии СумГУ

40007, г.Сумы, ул. Р.-Корсакова, 2



Последнее изменение этой страницы: 2016-07-22

headinsider.info. Все права принадлежат авторам данных материалов.