You are on page 1of 73

DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING

LAB MANUAL UNIX PROGRAMMING AND COMPILER DESIGN [ ]

Guru Engineering College

Nanak

Ibrahimpatnam, R R District 501 506 (A. P.)


Document No: GNEC/CSE/LAB MANUAL/UNIX & CD [ ] Date of Issue: Compiled By: Authorized By

HOD CSE Version: 1.1 Date of Revision: Verified By:

INDEX
S.No
1 Lab Objective

Contents
3

Page.no

Introduction About Lab 6-7 8

4 5

Guidelines to Students List of Lab Exercises

4.1 Syllabus Programs (JNTU) 4.2 Additional and Advanced Programs

5 6 7 8

Description about UNIX commands Solutions for Unix Programs Solutions for Compiler Design Programs References

9-17 18-48 54-66 67

LAB OBJECTIVE Upon successful completion of this Lab the student will be able to: 1. Demonstrate how to use the following Bourne Shell commands: cat, grep, ls, more, ps, chmod, finger, ftp, etc. 2. Use the following Bourne Shell constructs: test, if then, if then else, if then elif, for, while, until, and case. 3. Learn tracing mechanisms (for debugging), user variables, BourneShell variables, read-only variables, positional parameters, reading input to a BourneShell script, command substitution, comments, and exporting variables. In addition, test on numeric values, test on file type, and test on character strings are covered. 4. Copy, move, and delete files and directories 5. Write moderately complex Shell scripts. 6. Make a Shell script executable. 7. Create a ".profile" script to customize the user environment. 8. Use advanced features of File Transfer Protocol (FTP) 9. Compile source code into object and executable modules. 10. Execute programs written in c under UNIX environment

INTRODUCTION ABOUT LAB

There are 66 systems ( Compaq Presario ) installed in this Lab. Their configurations are as follows : Processor RAM Hard Disk Mouse Network Interface card : : : : : Present AMD Athelon 1.67 GHz 256 MB 40 GB Optical Mouse

Software All systems are configured in DUAL BOOT mode i.e, Students can boot from Windows XP or Linux as per their lab requirement. This is very useful for students because they are familiar with different Operating Systems so that they can execute their programs in different programming environments. Each student has a separate login for database access Oracle 9i client version is installed in all systems. On the server, account for each student has been created. This is very useful because students can save their work ( scenarios, pl/sql programs, data related projects ,etc) in their own accounts. Each student work is safe and secure from other students. Latest Technologies like DOT NET and J2EE are installed in some systems. Before submitting their final project, they can start doing mini project from 2nd year onwards.

MASM ( Macro Assembler ) is installed in all the systems Students can execute their assembly language programs using MASM. MASM is very useful students because when they execute their programs they can see contents of Processor Registers and how each instruction is being executed in the CPU. Rational Rose Software is installed in some systems Using this software, students can depict UML diagrams of their projects. Softwares installed : C, C++, JDK1.5, MASM, OFFICE-XP, J2EE and DOT NET, Rational Rose.

Systems are provided for students in the 1:1 ratio.

Systems are assigned numbers and same system is allotted for students when they do the lab.

Guidelines to Students
How to Run Shell Scripts There are two ways you can execute your shell scripts. Once you have created a script file: Method 1 Pass the file as an argument to the shell that you want to interpret your script. Step 1 : create the script using vi, ex or ed For example, the script file show has the following lines echo Here is the date and time date Step 2 : To run the script, pass the filename as an argument to the sh (shell ) $ sh show Here is the date and time Sat jun 03 13:40:15 PST 2006

Method 2: Make your script executable using the chmod command. When we create a file, by default it is created with read and write permission turned on and execute permission turned off. A file can be made executable using chmod. Step 1 : create the script using vi, ex or ed For example, the script file show has the following lines echo Here is the date and time date Step 2 : Make the file executable 6

$ chmod u+x script_file $ chmod u+x show Step 3 : To run the script, just type the filename $ show Here is the date and time Sat jun 03 13:40:15 PST 2006

How to run C programs Step 1 : Use an editor, such as vi, ex, or ed to write the program. The name of the file containing the program should end in .c. For example, the file show.c contains the following lines : main() { printf( welcome to GNEC ); } Step 2 : Submit the file to CC ( the C Compiler ) $ cc show.c If the program is okay, the compiled version is placed in a file called a.out Step 3 : To run the program, type a.out $ a.out Welcome to GNEC

List of Lab Exercises Syllabus Programs ( JNTU ) S.No 1 2 3 4 5 Programs Write a shell script to generate a multiplication table Write a shell script that copies multiple files to a directory. Write a shell script that counts the number of lines and words present in a given file. Write a shell script that displays the list of all files in a given directory. Write a shell script (small calculator) that adds,subtracts,multiplies and divides the given two integers. There are division options: one returns the quotient and the other returns remainder. The script requires 3 arguments: The operation to be used and two integer numbers. The options are add(-a),subtract(-s),multiply(-m),quotient(c) and remainder)-r). Write a Shell Script to reverse the rows and columns of a matrix Write a C program that counts the number of blanks in a text file. a) Using standard I/O b) Using system calls. Implement in C the following Unix commands using system calls. a) cat b) ls c) mv Write a program that takes one or more file/directory names as command line input and reports the following information on file: 8 Page No 18 19-20 21-22 23-24 25-26

6 7

27-28 29

30-32

33-34

10 11 12 13 14 15 16

c) File type. d) Number of links. e) Time of last access. f) Read, Write and Execute permissions. C program that illustrates how to execute two commands concurrently with a command pipe Write a C program that illustrates the creation of child process using fork system call. Write a C Program that displays the real time of a day every 60 seconds C Program for File locking using semaphores C Program for Inter Process Communication creating and sending to a simple message queue Write a C program tha illustrates the following. g) Creating a message queue. h) Writing to a message queue. i) reading from a message queue.

35-37 38-39 40 41 42-44 45-46 47-48

Basic Unix commands Command Syntax Description Examples

CAT
cat [argument] [specific file]

cat" is short for concatenate. This command is used to create, view and concatenate files. cat /etc/passwd This command displays the "/etc/passwd" file on your screen. cat /etc/profile This command displays the "/etc/profile" file on your screen. Notice that some of the contents of this file may scroll off of your screen. cat file1 file2 file3 > file4 This command combines the contents of the first three files into the fourth file.

Command Syntax Description

pwd pwd "pwd" stands for print working directory. It displays

your current position in the UNIX filesystem. Examples pwd There are no options (or arguments) with the "pwd" command. It is simply used to report your current working directory. Command Syntax ls
ls [options] [names]

Description Examples

"ls" stands for list. It is used to list information about files and directories. ls This is the basic "ls" command, with no options. It provides a very basic listing of the files in your current working directory. Filenames beginning with a decimal are considered hidden files, and they are not shown. ls -a The -a option tells the ls command to report information about all files, including hidden files. ls -l The -l option tells the "ls" command to provide a long listing of information about the files and directories it reports. The long listing will provide important information about file permissions, user and group ownership, file size, and creation date. ls -al This command provides a long listing of information about all files in the current directory. It combines the functionality of the -a and -l options. This is probably the most used version of the ls command. ls -al /usr This command lists long information about all files in the "/usr" directory. ls -alR /usr | more This command lists long information about all files in the

10

"/usr" directory, and all sub-directories of /usr. The -R option tells the ls command to provide a recursive listing of all files and sub-directories. ls -ld /usr Rather than list the files contained in the /usr directory, this command lists information about the /usr directory itself (without generating a listing of the contents of /usr). This is very useful when you want to check the permissions of the directory, and not the files the directory contains. Command Syntax Options Description Examples mv
mv [options] sources target

-b backup files that are about to be overwritten or removed


-i interactive mode; if dest exists, you'll be asked whether to overwrite the file

The "mv" command is used to move and rename files. mv Chapter1 Chapter1.bad This command renames the file "Chapter1" to the new name "Chapter1.bad". mv Chapter1 garbage This command renames the file "Chapter1" to the new name "garbage". (Notice that if "garbage" is a directory, "Chapter1" would be moved into that directory). mv Chapter1 /tmp This command moves the file "Chapter1" into the directory named "/tmp". mv tmp tmp.old Assuming in this case that tmp is a directory, this example renames the directory tmp to the new name tmp.old.

Command Syntax Options

rm
rm [options] files

-d, --directory unlink FILE, even if it is a non-empty directory (super-user only) -f, --force ignore nonexistent files, never prompt

11

-i, --interactive prompt before any removal -r, -R, --recursive remove the contents of directories recursively -v, --verbose explain what is being done Description The "rm" command is used to remove files and directories. (Warning - be very careful when removing files and directories!) rm Chapter1.bad This command deletes the file named "Chapter1.bad" (assuming you have permission to delete this file). rm Chapter1 Chapter2 Chapter3 This command deletes the files named "Chapter1", "Chapter2", and "Chapter3". rm -i Chapter1 Chapter2 Chapter3 This command prompts you before deleting any of the three files specified. The -i option stands for inquire. You must answer y (for yes) for each file you really want to delete. This can be a safer way to delete files. rm *.html This command deletes all files in the current directory whose filename ends with the characters ".html". rm index* This command deletes all files in the current directory whose filename begins with the characters "index". rm -r new-novel This command deletes the directory named "new-novel". This directory, and all of its' contents, are erased from the disk, including any sub-directories and files. Command Syntax Options cp
cp [options] file1 file2 cp [options] files directory

Examples

-b backup files that are about to be overwritten or removed -i interactive mode; if dest exists, you'll be asked whether to 12

overwrite the file


-p preserves the original file's ownership, group, permissions, and timestamp

Description

The "cp" command is used to copy files and directories. Note that when using the cp command, you must always specify both the source and destination of the file(s) to be copied.

Examples

cp .profile .profile.bak This command copies your ".profile" to a file named ".profile.bak". cp /usr/fred/Chapter1 . This command copies the file named "Chapter1" in the "/usr/fred" directory to the current directory. This example assumes that you have write permission in the current directory. cp /usr/fred/Chapter1 /usr/mary This command copies the "Chapter1" file in "/usr/fred" to the directory named "/usr/mary". This example assumes that you have write permission in the "/usr/mary" directory.

Command Syntax Options

grep
grep [options] regular expression [files]

-i -n -v

case-insensitive search show the line# along with the matched line invert match, e.g. find all lines that do NOT match
match entire words, rather than

-w substrings

Description

Think of the "grep" command as a "search" command (most people wish it was named "search"). It is used to search for text strings within one or more files. grep 'fred' /etc/passwd This command searches for all occurrences of the text string 'fred' within the "/etc/passwd" file. It will find and print (on the screen) all of the lines in this file that contain the text string 'fred', including lines that contain usernames like "fred" - and also "alfred". grep '^fred' /etc/passwd This command searches for all occurrences of the text string 'fred' within the "/etc/passwd" file, but also requires that the "f" 13

Examples

in the name "fred" be in the first column of each record (that's what the caret character tells grep). Using this more-advanced search, a user named "alfred" would not be matched, because the letter "a" will be in the first column. grep 'joe' * This command searches for all occurrences of the text string 'joe' within all files of the current directory. Command Syntax Description Examples mkdir
mkdir [options] directory name

The "mkdir" command is used to create new directories (sub-directories). mkdir tmp This command creates a new directory named "tmp" in your current directory. (This example assumes that you have the proper permissions to create a new sub-directory in your current working directory.) mkdir memos letters e-mail This command creates three new sub-directories (memos, letters, and e-mail) in the current directory. mkdir /usr/fred/tmp This command creates a new directory named "tmp" in the directory "/usr/fred". "tmp" is now a sub-directory of "/usr/fred". (This example assumes that you have the proper permissions to create a new directory in /usr/fred.) mkdir -p /home/joe/customer/acme This command creates a new directory named /home/joe/customer/acme, and creates any intermediate directories that are needed. If only /home/joe existed to begin with, then the directory "customer" is created, and the directory "acme" is created inside of customer.

Command Syntax Description

rmdir
rmdir [options] directories

The "rm" command is used to remove files and directories. (Warning - be very careful when removing files and directories!) rm Chapter1.bad 14

Examples

This command deletes the file named "Chapter1.bad" (assuming you have permission to delete this file). rm Chapter1 Chapter2 Chapter3 This command deletes the files named "Chapter1", "Chapter2", and "Chapter3". rm -i Chapter1 Chapter2 Chapter3 This command prompts you before deleting any of the three files specified. The -i option stands for inquire. You must answer y (for yes) for each file you really want to delete. This can be a safer way to delete files. rm *.html This command deletes all files in the current directory whose filename ends with the characters ".html". rm index* This command deletes all files in the current directory whose filename begins with the characters "index". rm -r new-novel This command deletes the directory named "new-novel". This directory, and all of its' contents, are erased from the disk, including any sub-directories and files. Command Syntax Description Examples cd, chdir
cd [name of directory you want to move to]

"cd" stands for change directory. It is the primary command for moving around the filesystem. cd /usr This command moves you to the "/usr" directory. "/usr" becomes your current working directory. cd /usr/fred Moves you to the "/usr/fred" directory. cd /u*/f* Moves you to the "/usr/fred" directory - if this is the only directory matching this wildcard pattern. cd Issuing the "cd" command without any arguments moves you

15

to your home directory. cd Using the Korn shell, this command moves you back to your previous working directory. This is very useful when you're in the middle of a project, and keep moving back-and-forth between two directories. Command Syntax kill
kill [options] IDs

Description

ends one or more process IDs. In order to do this you must own the process or be designated a privileged user. To find the process ID of a certain job use ps.
kill

Examples Command Syntax ps


ps [options]

Description Examples

The "ps" command (process statistics) lets you check the status of processes that are running on your Unix system. ps The ps command by itself shows minimal information about the processes you are running. Without any arguments, this command will not show information about other processes running on the system. ps -f The -f argument tells ps to supply full information about the processes it displays. In this example, ps displays full information about the processes you are running. ps -e The -e argument tells the ps command to show every process running on the system. ps -ef The -e and -f arguments are normally combined like this to show full information about every process running on the system. This is probably the most often-used form of the ps 16

command. ps -ef | more Because the output normally scrolls off the screen, the output of the ps -ef command is often piped into the more command. The more command lets you view one screenful of information at a time. ps -fu fred This command shows full information about the processes currently being run by the user named fred (the -u option lets you specify a username).

17

1)

Name of the Experiment:

AIM: Write a shell script to generate a multiplication table. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM: Step1: Step2: Step3: Step4: Step5: Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result 1) Enter the number 4 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 18 6 n should not 0 n should be -300 to +300 Start read n for i=1 to 10 print n*i Stop

4*8=32 4*9=36 4*10=40 Viva-Voce Questions 1. Why * is proceeded by \ ? 2. What are different types of shells? 3. How to execute shell script? 4. Explain syntax of for loop? 5. How arithmetic operations are done in Shell? 6. How to combine echo & read? 2) Name of the Experiment AIM: Write a shell script that copies multiple files to a directory. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Step2: Step3: Start read dir1 if (dir1==dir name) Print directory existes Else Print directory not exists if step 3 is true then Read file1 If file1 is exists Copy the file1 into file2 and print The file copied to dir1 Else File is not exists Stop

Step4: Step5: directory Step6: Test Data:

Valid Data Set: InValid Data Set:

Input should be a Directory name Not applicable 19

Limiting Data Set: Result 1) Enter Directory Name : 2) Enter Directory Name:

Not applicable

Guru Directory does not exist.

cse Directory exist Enter file name to be copied and type quit File copied Enter file name to be copied and type quit File copied Enter file name to be copied and type quit

Karuna Rajani quit

Viva-Voce Questions 1. 2. 3. 4. 5. 6. Explain syntax of while loop? How to check whether the given string is file or not? Which command is used for copying a file? Explain the syntax of command used for renaming the file? Which command is used to list files in Directory What vi stands for?

20

3) Name of the Experiment AIM: Write a shell script that counts the number of lines and words present in a given file. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Step2: Step3: Start read a file1 if file1 exists Print no. of lines are.. l Print no. of words are w Print no. of characters are.. c else Print file1 is not exists Stop

Step4: Step5: Test Data:

21

Valid Data Set: InValid Data Set: Limiting Data Set Result 1) Enter file name

Input should be a file name Not applicable Not applicable

Demo This is demo File to know Number of words Characters and line 4 13 65 engineer Guru Nanak Engineering College 1 4 30

Lines : Words : Characters: 2) Enter file name Lines : Words : Characters:

Viva-Voce Questions 1. 2. 3. 4. 5. 6. Which command is used for display file? Which command is used to count the no. of lines? Explain the syntax of wc? What is shell? Explain the syntax of if loop? What is vi editor?

22

4) Name of the Experiment AIM: Write a shell script that displays the list of all files in a given directory. S/W & H/W Requirements: S/W: Office-XP, Turbo C.

H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM: Step1: Step2: Start read dir1 23

Step3: Step4: Step5: Step6: Step7: Step8: Step9:

if (dir1==dir name) Print Directory exists if step3 is true Read file1 if(-r dir1/file1) then Print read else if (-w dir1/file1) then Print write else if(-x dir1/file1) then Print Execute else Print file1 is not exists Stop

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Input should be a directory name Not applicable Not applicable

Result Enter the directory name Directory exists -a file Read Write Execute -b file guru

24

Read Write Execute Enter the directory name nanak Directory does not exists

Viva-Voce Questions 1. How to know what permission the file or directory has? 2. Which command is used to list file in given directory along with permission? 3. What is the purpose of sort command? 4. Explain syntax of cmp command? 5. How to know how many users are currently log in? 6. What is pwd?

5) Name of the Experiment AIM: Write a shell script (small calculator) that adds , subtracts, multiplies and divides the given two integers. There are division options: one returns the quotient and the other returns remainder. The script requires 3 arguments: The operation to be used and two integer 25

numbers. The options are add (-a), subtract (-s), multiply (-m), quotient (-c) and remainder)-r). S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: read a, b, option Step3: if (option==1) then Result=a+b Print result Step4: if (option==2) then Result=a-b Print result Step5: if(option==3) then Result=a*b Print result Step6: if(option==4) then Result=a%b Print result Step7: if(option==5) Result=a/b Print result Else if Print Invalid operation Step8: Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Zero 5 8 5 0 the second number should not be

26

Result Enter two numbers: Enter the choice The result is Enter two numbers: Enter the choice The result is Viva-Voce Questions 1. 2. 3. 4. 5. 6. Explain the syntax of switch case statement? Which command is used for linking a file? What do you mean by linking a file? Which command is used for displaying time? Which command is used to search a pattern in given file? Explain syntax of cat command? 4 5 3 20 8 2 5 4

27

6) Name of the Experiment AIM: Write a shell script to reverse the rows and columns of a matrix. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: read m1[],m2[],a, b Step3: for i=1 to a for j=1 to b print m1[i][j] Step4: for i=1 to b for j=1 to a m2[i][j]=m1[i][j] Step5: print m2[i][j] Step6: Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: 1 2 3 4 Not applicable Not applicable

Result Enter the matrix size 2 3 28

Enter the matrix The resultant matrix is 1 4

1 2 3 4 5 6 2 3 5 6

Viva-Voce Questions 1. What are the three modes of vi editor? 2. Which commands are used to perform copy & paste operations in vi editor? 3. What is kernel? 4. What are the various shell responsibilities? 5. What are the various shell commands?

29

7) Name of the Experiment AIM: Write a C program that counts the number of blanks in a text file. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM: Step1: Step2: Step3: Step4: Step5: Step6: Step7: Step8: Step9: Test Data: Valid Data Set: Input should be a file name Start read fiel1, char ch, int sc initiate sc to 0 i.e sc=0 if(file1==NULL) then Print unable to open a file else if While end of file ch=fgetc(file1) if(ch== ) sc=sc+1 print no. of spaces are sc Stop

30

InValid Data Set: Limiting Data Set: Result 1) $ cc blank.c $ ./a.out blank.c

Not applicable Not applicable

Spaces are 11 Viva-Voce Questions 1. 2. 3. 4. 5. What is the procedure to create & execute C program in Unix? What is system calls? Explain the syntax of open() & read() system calls? What is the purpose of lseek system call? Where the object code of c program is getting saved in unix?

8) Name of the Experiment: AIM: Implement in C the following Unix commands using system calls. a) cat b) ls c) mv S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM: (cat system call) Step1: Step2: Step3: Step4: Step5: Start read int fd,i char ch[1] if(argc<2) Print Usage:mycat filename fd=open ( argv[1],O_RDONLY) if(fd==-1) 31

Step6: Step7: (ls system call) Step1: Step2: Step3: Step4: Step5:

Print argv[1] is not exists Else Print Contents of the file are argv[1] while(read(fd,ch,1)>0) Print (ch [0]) Stop

Step6:

start create a structure dinfo read dp if (argc<2) dp=opendir( .) if(dp==NULL) Print unable to open the directory Else While(dinfo=readdir(dp))!=NULL) Print dinfo->d_name Stop

(My system calls) Step1: Start Step2: read a file *fp Step3: if(argc<3) Print Usage:my mv oldfile newfile Else If(access(argv[1],F_OK==-1) Print file is not found Step4: if(access(argv[2],F_OK==0) Print File is already exists Step5: rename(argv[1],argv[2]) Step6: print File moved or renamed successfully Step7: Stop Test Data: Valid Data Set: Input should be a file name

32

InValid Data Set: Limiting Data Set: Result: Implementing cat command

Not applicable Not applicable

1) $ cc cat.c $ ./a.out one Contents of the file one is: Welcome to Unix Programming Implementing ls command $ cc ls.c $ ./a.out kal . .. File 1 Kal2.sh Implementing mv command $ cc mv.c $ ./a.out b c File moved or renamed successfully

Viva-Voce Questions: 1. 2. 3. 4. 5. Explain opendir() system call? What are the various options that can be used with ls command? Explain different uses of cat command? What is the purpose of mv command? What are the various elements of different structure?

33

9) Name of the Experiment: AIM: Write a program that takes one or more file/directory names as command line input and reports the following information on file: c) File type. d) Number of links. e) Time of last access. f) Read, Write and Execute permissions. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

34

ALGORITHM Step1: Step2: Step3: Step4: Step5: Step6: Step7: error)) Step8: Step9: Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result: cc file inf.c ./a.out file.inf.c Size 320 Type and permission : 10064 No.of links : 1 Access time . Apr 20 10:45:35 Input should be a file name Not applicable Not applicable Start read a FILE *stream int buffer_character stream= fopen(test,r) if(stream==(FILE *))0) Print (stderr,Error opening file(printed to standard error)) while ((buffer_character=getc(stream))!=EOF) write the character to standard out and check for errors if((putc(buffer_character,stdout))==EOF) Print (stderr,Error writing to standard out.(printed to standard if(fclose(stream))==EOF) Print(stderr,Error closing stream.(printed to standard error)) stop

Viva-Voce Questions: 1. What is inode table? What all information it consist of regarding files? 35

2. 3. 4. 5. 6.

How to know the inode has no. of a particular file? How we can access the inode table? Explain the syntax of stat() & fstat() system calls? What is the difference between stat() & fstat()? What are the various elements of stat structure?

10) Name of the Experiment: AIM: C program that illustrates how to execute two commands concurrently with a command pipe 36

S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Step2: Step3: Step4: Step5: Step6: Start read int i,pid static char path[]=/u/test2 fork a child process pid=fork() if(pid==0) chdir(path) for i=0 to 30000 sub2() i++ /*30000 calls to sub2 in child profile*/ else /*parent process.leave gmon.out in current directory*/ for i=0 to 1000 sub1(pid) i++ /*1000 calls to sub1 in parent profile*/ read int sub1(pid) /*silly little function called by parent 1000 int pid,i print (Im the parent ,child pid ) print(Im the child)

Step7: times Step8: Step9: Step10:stop Test Data:

Valid Data Set: InValid Data Set: Limiting Data Set:

Input should be a file name Not applicable Not applicable

37

Result: sh-2.00$ fork Process 19643 about to fork a child. PID TT S TIME COMMAND 19632 p1 S 0:00.36 -bash (bash) 19638 p1 S + 0:00.07 script showem 19640 p1 S + 0:00.03 script showem 19641 p2 S 0:00.15 sh -is 19643 p2 S + 0:00.04 fork 19644 p2 S + 0:00.01 fork 19645 p2 S + 0:00.04 sh -c ps 19646 p2 R + 0:00.04 sh -c ps 19648 p2 R + 0:00.00 sh -c ps PID TT S TIME COMMAND bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb 19632 p1 S 0:00.36 -bash (bash) 19638 p1 S + 0:00.07 script showem 19640 p1 R + 0:00.03 script showem 19641 p2 S 0:00.15 sh -is 19643 p2 S + 0:00.04 fork 19644 p2 S + 0:00.01 fork 19645 p2 R + 0:00.04 sh -c ps 19646 p2 S + 0:00.04 sh -c ps Created child process 19644. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa 38

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bbbbbbbbbbbbbbbb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaa sh-2.00$ exit exit

Viva-Voce Questions; 1. 2. 3. 4. 5. What is the pipeline? Explain with Example? $who | wc l what will be the output of this command? Pipeline is example of which redirection? What is input & output of redirection? What is the difference between the file and kernel?

39

11) Name of the Experiment: AIM: Write a program that illustrates the creation of child process using fork system call. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Step2: Step3: Step4: Step5: Start read pid_t pid pid=fork() switch(pid) if case = -1 Print Fork called Else if case= 0 Print It is child process Step6: else Print It is parent process : CHILD PID is pid Step7: Stop 40

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Input should be a file name Not applicable Not applicable

Result: $ cc fork.c $ ./a.out fork.c It is a child process It is parent process : child pid is : 16281

Viva Voce Questions: 1. 2. 3. 4. 5. 6. What is process? What are the various attributes of process & when they will be saved? What is the purpose of fork() system call?explain with syntax? What is zombie process? What is chioldprocess & parent process?what are its pids? What is the purpose of esec & wait system call?

41

12) Name of the Experiment AIM: Write a C Program that displays the real time of a day every 60 seconds S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk Step1: Step2: Step3: Step4: Step5: Start create a structure of time t Read int h,m,s,s1 read time t s1=t.ti_sec; while(!kbhit()) 42

Step6: Step7: Test Data:

h=t.ti_hour m=t.ti_min s=t.ti_sec if(s1==s) print( h,m,s) Stop

Valid Data Set: InValid Data Set: Limiting Data Set: Result 9:57:19 Viva-Voce Questions 1. 2. 3. 4. 5. Explain gettime() function with example? For what kbhit() function is used? What are the elements of time structure? What is the function of delay option? What is the use of fcntl.h?

13 ) Name of the Experiment AIM: Write a C Program that illustrates file locking using semaphores S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: read int semidkey_t key 43

Step3: create a union semun Step4: if((key=ftok(semdemo.c,J))==-1) Perror(ftok) Step5: create a semaphore set with 1 semaphore If((semid=semget(key,1,0666|IPC_CREAT))==-1) Perror(semget) Step6: initiliaze semaphore #0 to 1 Arg.val=1 Step7: if(semctl(semid,0,SETVAL,arg)==-1) Perror(semctl) Step8: Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result $ cc fork.c $ ./a.out fork.c It is a child process It is parent process : child pid is : 16281 Viva-Voce Questions: 1. 2. 3. 4. 5. What is semaphore? What are the two types of locking ?Explain difference? What is file locking & record locking? Which function is used for file locking explain with syntax? Explain fcntl function used for record locking? Input should be a file name Not applicable Not applicable

14) Name of the Experiment: AIM: C Program for Inter Process Communication S/W & H/W Requirements: S/W: Office-XP, Turbo C.

44

H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: create struct sembuf sop int full ,empty,mutex Step3: struct msg read long mtype char s[15] Pmsg,cmsg Step4: create the function for Producer() read int item=0 Step5: while(item!=0) Produce-item(item) down(empty) down(mutex) enter-item(item) up(mutex) up(full) item=(item+1) %10 Step6: create the function for Consumer() Read int item=0 Step7: while(item!=0) down=full down(mutex) remove-item(item) up(mutex) up(empty) consume-item(item) item=(item+1)%10 Step8: produce-item(int I) int mquid; sleep(1) print enter data for item no I read Pmsg.s Pmsg.mtype=5 Step9: enter-item(int I) int mqid mqid=msgget((key-t)25,ipc-CREAT:0644) msgnd(mqid,&pmsg,sizeof(pmsg.s)0) print item written Step10:down(int semid) sop.sem-num=0 sop.sem-op=-1 45

sop.sem-flg=0 semop(semid,&sop,1) Step11:up(int semid) sop.em-num=0 sop.op=-1 sop.flag=0 semop(semid,&sop,1) Step12:remove-item(int I) int mqid mqid=msgget((key-t)25,IPC-CREATE:0644) msgrcv(mqid,&cmsg,sizeof(cmsg.s),5,0) print item read from queue Step13:Consume-item(int I) Print item value is I,cmsg.s Step14:/*main program*/ read pid,mqid Step15:mutex=semget(ckey-t)27,I,IPC-CREAT:0644) Step16:semct 1(mutex,0,SETVAL,1) Step17:empty=(semget(ckey-t)28,I,IPC-CREAT:0644) Step18:full=semget(ckey-t)29,I,IPC-CREAT:0644) Step19:sem1(full,0,STEVAL,0) Step20:mqid=msgget(key-t)25,IPC-CREAT:0644) Step21:pid=fork() Step22:if(pid==0) Execute Consumer() function Else Execute Producer() function Step23:Stop

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Input should be a file name Not applicable Not applicable

46

Result:

Viva-Voce Questions: 1. 2. 3. 4. 5. What is the two types of semaphores? What is semget,semop,semctl functions? What is producer,consumer problem? How IPC is performed using pipe? How pipe is created ?Expalin with example?

47

15) Name of the Experiment: AIM: creating and sending to a simple message queue S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: read FILE *fp1, *fp2, *fp3, *fp4, *fopen() float i ,y1,y2,y3,y4 Step3: /* open files which will store plot data */ if ( ((fp1 = fopen("plot11.dat","w")) == NULL) || ((fp2 = fopen("plot12.dat","w")) == NULL) || ((fp3 = fopen("plot21.dat","w")) == NULL) || ((fp4 = fopen("plot22.dat","w")) == NULL) ) Print Error can't open one or more data files Step4: signal(SIGINT,quit) Step5: StartPlot() Step6: y1 = 0.5 Step7: srand48(1) Step8: i=0i Step9: i+=0.01) Step10:y2 = (float) drand48() Step11:if (i == 0.0) y3 = 0.0 else y3 = sin(DEG_TO_RAD(1.0/i)) y4 = sin(DEG_TO_RAD(i)) Step12: /* load files */ print(fp1,"%f %f\n",i,y1) print(fp2,"%f %f\n",i,y2) print(fp3,"%f %f\n",i,y3) print(fp4,"%f %f\n",i,y4) Step13:/* reads up to data file */ 48

flush(fp1) flush(fp2) flush(fp3) flush(fp4) Step14: /* plot graph */ PlotOne() usleep(250) void quit() Step15: print caught: Shutting down pipes Step16: StopPlot() Step17: print closing data files fclose(fp1) fclose(fp2) fclose(fp3) fclose(fp4) Step18: print deleting data files Step19: RemoveDat() Step20: Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result: Enter files: ABCD Caught :Shutting down pipes Closing data files Input should be a file name Not applicable Not applicable

49

Viva-Voce Questions 1. 2. 3. 4. 5. What is the purpose of interprocess communication? What are the various IPC mechanisms? How IPC is performed using shared memory? What are the avripus shared memory system call? What is shared memory?

16) Name of the Experiment: AIM: Write a C program tha illustrates the following. g) Creating a message queue. h) Writing to a message queue. i) reading from a message queue. S/W & H/W Requirements: S/W: Office-XP, Turbo C. H/W: Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk ALGORITHM Step1: Start Step2: /* Declare the message structure.*/ typedef struct msgbuf long mtype char mtext[MSGSZ] message_buf Step3: read int msqid int msgflg = IPC_CREAT | 0666 key_t key message_buf sbuf size_t buf_length Step4: /* Get the message queue id for the * "name" 1234, which was created by * the server. */ key = 1234

50

Step5: Step6:

print stderr, "\nmsgget: Calling msgget(%#lx,\ %#o)\n",key,msgflg if ((msqid = msgget(key, msgflg )) < 0) perror("msgget") else print stderr,"msgget: msgget succeeded: msqid = %d\n", msqid)

Step7:

/* We'll send message type 1 */ sbuf.mtype = 1

Step8: printstderr,"msgget: msgget succeeded: msqid = %d\n", msqid) Step9: strcpy(sbuf.mtext, "Did you get this?") Step10: printstderr,"msgget: msgget succeeded: msqid = %d\n", msqid) buf_length = strlen(sbuf.mtext) + 1 Step11: /*Send a message. */ if (msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) < 0) { print %d, %d, %s, %d\n", msqid,sbuf.mtype,sbuf.mtext, buf_length) perror("msgsnd") else print Message: \"%s\" Sent\n", sbuf.mtext

Step12:Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Input should be a file name Not applicable Not applicable

Result: Enter some text: Enter some text: Enter some text: You Wrote: You Wrote: Hello How r u Today Hello How r u 51

You Wrote:

Today

Viva-Voce Questions: 1. 2. 3. 4. 5. How IPC is performed using message queue? What are various message system calls? What are various message operations? Explain message passing with example? What is signal? What are various signal functions?

LAB OBJECTIVE The language Processors comprises assemblers, compilers and interpreters. It deals with the recognition the translation, and the execution of formal languages It is closely related to compiler construction.

Students will gain the knowledge of Lexical Analysis for decomposing a character stream into lexical units Syntax analysis for recovering context-free structure from an input stream, error correction Semantic analysis for enforcing non-context-free requirements, attribute grammars. Semantic definition, for describing the meaning of a phrase (we rely on interpretive definitions) Implementation of programming concepts, control structures

52

Data representation, implementation of data structures Partial evaluation, for removing interpretation overhead Code generation: instruction selection, register allocation Further semantic analysis: document validation , type checking.

PART B
To provide an understanding of the language translation peculiarities by designing a complete translator for a mini language. Consider the following mini language, a simple procedural high-level language, only operating on integer data, with a syntax looking vaguely like a simple C crossed with Pascal. The syntax of the language is defined by the following BNF grammar <program> ::= <block> <block> ::= { <variabledefinition> <slist> } | {<slist>} <variabledefinition> ::= int <vardeflist> ; <vardeflist> ::= <vardec> I <vardec> , <vardetlist> <vardec> ::= <identifier> I <identifier> [ <constant> ] <slist> ::= <statement> I <statement> ; <slist> 53

<statement> ::= <assignment> I <ifstatement> I <whilestatement> I <block> I <printstatement> I <empty> <assignment> ::= <identifier> = <expression> I <identifier> [ <expression> ] = <expression> <ifstatement> ::= if <bexpression> then <slist> else <slist> endif I if <bexpression> then <slist> endif <whilestatement> ::= while <bexpression> do <slist> enddo <printstatement> ::= print ( <expression> ) <expression> ::= <expression> <addingop> <term> 1 <term> 1 <addingop> <term> <bexpression> ::= <expression> <relop> <expression> <relop> ::= < I <= I == I >= I > I != <addingop> ::= + 1<term> ::= <term> <multop> <factor> I <factor> <multop> ::= ' 1/ <factor> ::= <constant> I <identifier> 1 <identifier> [ <expression>] I ( <expression> ) <constant> ::= <digit> 1 <digit> <constant> <identifier> ::= <identifier> <Ietterordigit> I <letter> <lelterordigit> ::= <letter> I <digit> <letter> ::= alblcldlelflglhlililklllmlnlolplqlrlsltlulvlwlxlYlz <digit> ::= 0|1|2|3|4|5|6|7|8|9| <empty> has the obvious meaning Comments (zero or more characters enclosed between the standard C/Java-style comment brackets / can be inserted. The language has rudimentary support for 1-dimensional arrays. The declaration a[31 declares an array of three elements, referenced as a[O], a[1] and a[2]. Note also that you should worry about the scoping of names. A simple program written in this language is: { int a[3],t1,t2; t1=2; a[0]=1; a[1]=2; a[t1]=3; t2=-(a[2]+t1*6)/(a[2]-t1); if t2>5 then print(t2); else { int t3; t3=99; t2=-25; 54

print{-t1+t2*t3); /* this is a comment on 2 lines */ ) endif) 1. Design a Lexical analyzer for the above language. The lexical analyzer should ignore redundant spaces, tabs and newlines. It should also ignore comments. Although the syntax specification states that identifiers can be arbitrarily long, you may restrict the length to some reasonable value. 2. Implement the lexical analyzer using flex, flex or lex or other lexical analyzer generating tools. 3. Design Predictive parser for the given language 4. Design LALR bottom up parser for the above language. 5. Convert the BNF rules into Yacc form and write code to generate abstract syntax tree. 6. Write program to generate machine code from the abstract syntax tree generated by the parser. TI following instruction set may be considered as target code. The following is a simple register-based machine, supporting a total of 17 instructions. It has the distinct internal storage areas. The first is the set of 8 registers, used by the individual instruction as detailed below, the second is an area used for the storage of variables and the third is an area for the storage of program. The instructions can be preceded by a label. This consists of an int, in the range 1 to 9999 and the label is followed by a colon to separate it from the rest of II instruction. The numerical label can be used as the argument to a jump instruction, as detailed bel In the description of the individual instructions below, instruction argument types are specified follows: R specifies a register in the form RO, R1, R2, R3, R4, R5, R6 or R7 (or rO, r1, etc.). L specifies a numerical label (in the range 1 to 9999). v specifies a ''variable location" (a variable number, or a variable location pointed to by a register below). A specifies a constant value, a variable location, a register or a variable location pointed to by a regi (an indirect address). Constant values are specified as an integer value, optionally preceded~, minus sign, preceded by a # symbol. An indirect address is specified by an @ followed by a regi So, for example, an Atype argument could have the form 4 (variable number 4), #4 (the constant 4), r4 (register 4) or @r4 (the contents of register 4 identifies the variable location to be access, The instruction set is defined as follows: LOAD A,R loads the integer value specified by A into register R. STORE R,V 55

stores the value in register R to variable V. OUT R outputs the value in register R. NEG R negates the value in register R. ADDA,R adds the value specified by A to register R, leaving the result in register R. SUB A,R subtracts the value specified by A from register R, leaving the result in register R. MULA, R multiplies the value specified by A by register R, leaving the result in register R. DIV A, R divides register R by the value specified by A, leaving the result in register R. JMP L Causes an unconditional jump to the instruction with the label L. JEQ R, L jumps to the instruction with the label L if the value in register R is zero. JNE R,l jumps to the instruction with the label L if the value in register R is not zero. JGE R,l jumps to the instruction with the label L if the value in register R is greater than or equal to zero. JGT R,L jumps to the instruction with the label L if the value in register R is greater than zero . . E JLE R,L jumps to the instruction with the label L if the value in register R is less than or equal to zero. JLT R,L jumps to the instruction with the label L if the value in register R is less than zero. NOP is an instruction with no effect. It can be tagged by a label. STOP stops execution of the machine. All programs should terminate by executing a STOP instruction.

56

Syllabus Programs

S.No Name of the Program 1 Design a Lexical analyzer. The lexical analyzer should ignore redundant s tabs and new lines. It should also ignore comments. Although the syntax specification s that identifiers can be arbitrarily long, you may restrict the length to some reasonable Value.

Page No 54-56

57-58 2 Implement the lexical analyzer using JLex,flex or lex other lexical analyzer generating tools. 59-60 3 4 5 Design Predictive Parser for the given language 61-62 Design LALR bottom up parser for the above language 63-64 Convert the BNF rules into YACC form and write code to generate abstract syntax tree 65-66 6 Write program to generate machine code from the abstract syntax tree generated by the Parser .The following instruction set may considered as target code.

57

1) Name of the Experiment: AIM: Design a Lexical analyzer. The lexical analyzer should ignore redundant s tabs and new lines. It should also ignore comments. Although the syntax specification s that identifiers can be arbitrarily long, you may restrict the length to some reasonable Value. S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

ALGORITHM: We make use of two functions. look up() it takes string as argument and checks its presence in the symbol table. If the string is found then returns the address else it returns NULL . insert() it takes string as its argument and the same is inserted into the symbol table and the corresponding address is returned. Step1: Step2: Start function scan lexbuf[50] of char tokenvalue[10] begin store scanned char in c if c blank or tab,then do nothing else if c is \n,then line_number :=line_number=1 else if c is a digit token value:=value of the digit and successive digits return tokentype 58

Step3:

Step4:

p:=lookup(lexbuf) if p:=NULL, then p:=insert(lexbuf,id) token value:=lexbuf return(attribute from symboltable) else tokenvalue:=NULL return(NULL) end Stop

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result INPUT file xx.txt { int t1,t2 t1=2 t2=t1*3/2; if t2>5 then print(t2); else { int t3; t3=99; t2=-25 print(-t1+t2+t3); } End if Input should be a file name Not applicable Not applicable

59

OUTPUT SOB int ID SEPE ID ENDST ID ASSIGN ENDST ID ASSIGN ID MULOP DIVOP ENDST If ID GT NUM Then print OPENPRA ID CLOSEPRA ENDST Viva-Voce Questions 1. 2. 3. 4. 5. What is lexical analyzer? Which compiler is used for lexical analyzer? What is YACC? What is the output of Lexical analyzer? What is LEX source Program? else SOB int ID ENDST ID ASSIGN NUM ID ASSIGN SUBOP NUM ENDST OPENPRA SUBOP ID ADDOP ID MULOP ID CLOSEPRA ENDST EOB endif

60

2) Name of the Experiment: AIM: Implement the lexical analyzer using JLex, flex or lex other lexical analyzer generating tools. S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

ALGORITHM: Step1: Step2: Start Declare the declarations for the given language tokens like digit, alphabet, white space, delimiters, etc. digit[0-9] letter[A-Z a-z] delim[\t\n] 61

W${delim}+ID{(letter)(letter/digit)}+ Integer {digit}+ %% {ws} {print (SpecialCharacters)} {ID} {print(Identifiers)} {digit} {print(\n Integer)} if {printf(keyword)} else {print(keyword)} & & {print(logoical operators)} >{print(logoical operators)} <{print(logoical operators)} <={print(logoical operators)} >={print(logoical operators)} = {printf(\n \n)} !{printf(\n \n)} + {printf(arithmetic operator)} - {printf (arithmetic) * {printf(arithmetic)} % {printf(arithmetic)} % % {printf(arithmetic)} Step3: Write the auxillary procedure in main() function Step4: end Step5: Stop

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result Input should be a file name Not applicable Not applicable

62

Viva-Voce Questions 1. What is Parsing? 2. Construct the parsing table for the given? S1 iC+SS1|a S1 eS1| C b 3. What is Token? 4. What is Jlex? 5. What is Flex?

3) Name of the Experiment AIM: Design Predictive Parser for the given language

S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

63

ALGORITHM Step1: Step2: Step3: Step4: Step5: Step6: Step7: Step8: Step9: Step10: Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result INPUT file { int a, ba[10]; a=a*a; b=a*b; if a<b print (a); else print(b); } OUTPUT: Successful parsing 64 aa.txt Input should be a file name Not applicable Not applicable Start declare w[10] as char and Z as an array enter the string with $ at the end if (A(w[z]) then increment z and check for (B(w[z])) and if satisfies increment z and check for d if d is present then increment and check for (D(w[z])) if step 4 is satisfied then the string is accepted Else string is not give for the grammer A-> bc/ab in the loop A(int k) Describe the grammer b->c/d in the loop B (int k) Similarly describe the grammer D->d/abcd if steps7,8,9 are satisfied accordingly string is accepted Else string is not accepted Stop

Viva-Voce Questions

1. 2. 3. 4. 5.

What is Predictive parser? How many types of analysis can we do using Parser? What is Recursive Decent Parser? How many types of Parsers are there? What is LR Parser?

4) Name of the Experiment: AIM: Design LALR bottom up parser for the above language 65

S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

ALGORITHM Step1: Step2: Step3: Step4: Step5: Step6: Step7: Step8: Step9: Start Initially the parser has s0 on the stack where s0 is the initial state and w$ is in buffer Set ip point to the first symbol of w$ repeat forever, begin Let S be the state on top of the stack and a symbol pointed to by ip If action [S, a] =shift S then begin Push S1 on to the top of the stack Advance ip to next input symbol Else if action [S, a], reduce A->B then begin Pop 2* |B| symbols of the stack Let S1 be the state now on the top of the stack Output the production A->B End else if action [S, a]=accepted, then return Else Error() End Stop

Step10:

Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Input should be a file name Not applicable Not applicable

66

Result [ [ [ [ ] $ lex parser.l ] $ Yacc -d parser.y ] $ cc lex.yy.c y.tab.c -ll -ld ] $ ./a.out

2+3 5.000

Viva-Voce Questions 1. 2. 3. 4. 5. What is LALR parsing? What is Shift reduced parser? What is the operations of Parser? What is the use of parsing table? What is bottom up parsing?

67

5) Name of the Experiment: AIM: Convert the BNF rules into YACC form and write code to generate abstract syntax tree S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

ALGORITHM Step1: Start Step2: declare the declarations as a header file {include<ctype.h>} Step3: token digit Step4: define the translations rules like line, expr, term, factor Line:exp \n {print(\n %d \n,$1)} Expr:expr+ term ($$=$1=$3} Term:term + factor($$ =$1*$3} Factor Factor:(enter) {$$ =$2) %% Step5: define the supporting C routines Step6: Stop Test Data: Valid Data Set: InValid Data Set: Limiting Data Set: Result 68 Input should be a file name Not applicable Not applicable

[ [ [ [

] ] ] ]

$ lex int.l $ Yacc -d int y $ cc lex.yy.c y.tab.c -ll -ly $ ./a.out test.c

POS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Operator < == + = Goto < == + = GOTO <= == = GOTO + =

Arg1 a to a t1 a t2 a t3 a t4 a t5 a t6

Arg2 b FALSE5 b b FALSE10 b b FALSE+=5 b b

Result to +1 a 5 t2 +3 a 5 t4 +5 c 17 t6 c

Viva-Voce Questions 1. 2. 3. 4. 5. What is Abstract Syntax tree? What are BNF Rules? What is DAG representation? How LALR(1) states are generates? In which condition the user has to supply more information to YACC?

69

6) Name of the Experiment: AIM: Write program to generate machine code from the abstract syntax tree generated by the Parser .The following instruction set may considered as target code. S/W & H/W Requirements: S/W: XP, H/W: Yet Another Compiler to Compiler (YACC) Compiler, Office Pentium IV Processor, 256 MB RAM, 40 GB Hard Disk

ALGORITHM Step1: Start Step2: for every three address statement of the form x=y op z Step3: begin Step4: Call getreg() to obtain the location L which the computation y op z should be performed Step5: Obtain the current location of the operand y by consulting its address descriptor ,and if the values of Y are currently both in the memory location as well as in the register, then prefer the register.If the value of y is not currently available in 1,then generate an instruction MOV y,l Step6: Generate the instruction OP Z,l and update the address descriptor of X to indicate that X is now available in l and in register then update t\ its descriptor to indicate that it will 70

Step7:

Step8: Step9: Test Data:

contain the run time value of x If the current values of y ad/or z are in register and we have no further use for them,and they are live at the end of the block,then after the register descriptor to indicate that after the execution of the statem,ent x=y op z,those registers will no longer contain y and / or z. store all results Stop

Valid Data Set: InValid Data Set: Limiting Data Set:

Input should be a file name Not applicable Not applicable

Result Input file text1.txt =+ 1 a a a + 2 1 2 3 a

2 3 4 b

Output file target.txt STORE STORE STORE STORE LOAD a , R0 71 t1 , 2 a[1],2 a[2],3 a[3],4

LOAD b , R1 ADD R1 , R0 SUB R0 , c

Viva-Voce Questions 1. 2. 3. 4. 5. What is target code? What is machine code? What is Cross compiler? Give the example for cross compiler? What is the difference between syntax & Semantics?

References: BOOKS: Unix the ultimate Guide, Unix networking programming, Advanced Programming in Unix environment, Principles of Compiler Design, Modem Compiler Implementation in C Lex&yacc Mason,Doug Sumitabha das,TMH W.R Stevens Pearson/PHI W.R Stevens Pearson/PHI

LMAN Narosa Andrew N. Appel,Cambridge University Press John R.Levine,Tony Brown,Orelly

72

WEBSITES: www.unix.com www.compilerdesign.com www.lexicalanalyzer.com www.w3school.com

73

You might also like