0% found this document useful (0 votes)
117 views8 pages

National Institute of Technology Uttarakhand: Language Processor

This document appears to be a lab record submitted by a student named Nupur Munda to their professor Dr. Kamal Kumar. It contains the source code for programs to implement the first pass of an assembler and a lexical analyzer. The lab record includes sections for the program inputs, outputs, and source code comments for each program.

Uploaded by

Ravi Singh Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
117 views8 pages

National Institute of Technology Uttarakhand: Language Processor

This document appears to be a lab record submitted by a student named Nupur Munda to their professor Dr. Kamal Kumar. It contains the source code for programs to implement the first pass of an assembler and a lexical analyzer. The lab record includes sections for the program inputs, outputs, and source code comments for each program.

Uploaded by

Ravi Singh Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

NATIONAL INSTITUTE OF TECHNOLOGY

UTTARAKHAND

Department Of Computer Science And


Engineering

Language Processor
LAB RECORD

Submitted To-: Submitted by-:


Dr. Kamal Kumar Nupur Munda
ASSISTANT PROFESSOR BT16CSE011
NIT UTTARAKHAND
TABLE OF CONTENT
No Topic Date Sign
1

10

11

12

13

14

15

16

17

18

19

20
Lab 1: Program to implement pass1 of an Assembler
/* Program for pass 1 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
FILE *f1,*f2,*f3,*f4;
int lc,sa,l,op1,o,len;
char m1[20],la[20],op[20],otp[20];
f1=fopen("input.txt","r");
f3=fopen("symtab.txt","w");
fscanf(f1,"%s %s %d",la,m1,&op1);
if(strcmp(m1,"START")==0)
{
sa=op1;
lc=sa;
printf("\t%s\t%s\t%d\n",la,m1,op1);
}
else
lc=0;
fscanf(f1,"%s %s",la,m1);
while(!feof(f1))
{
fscanf(f1,"%s",op);
printf("%d\t%s\t%s\t%s\n",lc,la,m1,op);
if(strcmp(la,"-")!=0)
{
fprintf(f3,"\n%d\t%s\n",lc,la);
}
f2=fopen("optab.txt","r");
fscanf(f2,"%s %d",otp,&o);
while(!feof(f2))
{
if(strcmp(m1,otp)==0)
{
lc=lc+3;
break;
}
fscanf(f2,"%s %d",otp,&o);
}
fclose(f2);
if(strcmp(m1,"WORD")==0)

{
lc=lc+3;
}
else if(strcmp(m1,"RESW")==0)
{
op1=atoi(op);
lc=lc+(3*op1);
}
else if(strcmp(m1,"BYTE")==0)
{
if(op[0]=='X')
lc=lc+1;
else
{
len=strlen(op)-2;
lc=lc+len;}
}
else if(strcmp(m1,"RESB")==0)
{
op1=atoi(op);
lc=lc+op1;
}
fscanf(f1,"%s%s",la,m1);
}
if(strcmp(m1,"END")==0)
{
printf("Program length =%d\n",lc-sa);
}
fclose(f1);
fclose(f3);

}
/* Inputs for pass 1 */

/*input.txt*/
/* optab.txt*/
/* Outputs for pass 1 */

/* Symtab.txt*/

/* terminal output*/
Lab 2: Program to implement Lexical Analyzer
/* Program in cpp */

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include <queue>
using namespace std;
queue <char> Optr;
queue <string> Id;
queue <string> Key;
int isKeyword(char buffer[]){
char keywords[32][10] = {"auto","break","case","char","const","continue","default",
"do","double","else","enum","extern","float","for","goto",
"if","int","long","register","return","short","signed",
"sizeof","static","struct","switch","typedef","union",
"unsigned","void","volatile","while"};
int i, flag = 0;

for(i = 0; i < 32; ++i){


if(strcmp(keywords[i], buffer) == 0){
flag = 1;
break;
}
}

return flag;
}

int main(){
char ch, buffer[15], operators[] = "+-*/%=";
ifstream fin("program.txt");
int i,j=0;

if(!fin.is_open()){
cout<<"error while opening the file\n";
exit(0);
}

while(!fin.eof()){
ch = fin.get();

for(i = 0; i < 6; ++i){


if(ch == operators[i])
Optr.push(ch);

}
if(isalnum(ch)){
buffer[j++] = ch;
}
else if((ch == ' ' || ch == '\n') && (j != 0)){
buffer[j] = '\0';
j = 0;

if(isKeyword(buffer) == 1)
Key.push(buffer);
else
Id.push(buffer);

}
cout<<"Operator: ";
while (!Optr.empty())
{
cout << '\t' << Optr.front();
Optr.pop();
}
cout<<"\nIdentifier: ";
while (!Id.empty())
{
cout << '\t' << Id.front();
Id.pop();
}
cout<<"\nKeywords: ";
while (!Key.empty())
{
cout << '\t' << Key.front();
Key.pop();
}
fin.close();
fin.close();

return 0;
}

/* Inputs */
/* Outputs */

You might also like