Add to Favorites    Make Home Page 11874 Online  
 Language Categories  
 Our Services  

Home » C++ Home » Complier Development Home » Lexical Analyser for languages like C,PASCAL etc. (Mini Project)

A D V E R T I S E M E N T

Search Projects & Source Codes:

Title Lexical Analyser for languages like C,PASCAL etc. (Mini Project)
Author Jatin Rajpal
Author Email jatin911 [at] yahoo.com
Description A simulated lexical analyser for HLL like C,PASCAL etc. I have given a sample text file from which the source code reads the dummy
program n analyses it. The program can be extended by adding more.
Category C++ » Complier Development
Hits 37086
Code Select and Copy the Code
/* LEX.cpp */ /*PROGRAM TO IMPLEMENT LEXICAL ANALYSER ON C AS A LANGUAUGE */ # include <iostream.h> # include <conio.h> # include <fstream.h> # include <ctype.h> //header files # include <dos.h> # include <stdlib.h> # include <stdio.h> # include <string.h> # define MAX 50 # define ERROR 0 # define ID 1 # define KEY 2 # define DELIM 3 # define OP 4 //constant declarations # define DATA_TYPE 0 # define OPER 2 # define KWORD 4 # define RTYPE 5 # define NUM 6 int bcount=0; char *msg[]={"error!!","id","key","delim","oprtr","num"},token[MAX][MAX],lex[MA X][MAX],attr[MAX][MAX]; char *msg2[]={"data type","identifier","operator","special character","keyword","return type","number"}; char buff[MAX],spl[]={' ',',',';',' ','(',')','{','}'}; char *data[]={"int","char","float","long","unsigned","void"}; char oper[]={'+','-','*','/','%','=','|','^','<','>','<=','>=','<>'}; char keys[4][10]={{"begin"},{"end"},{"start"},{"int"}},row[2],col[2]; /********************FUNCTIONS************************/ void display(int symcount); //display function for symbol table int flush_buff(char buff[MAX]) { for(int i=0;buff[i]!='<8;i++) //function for checkin spl.char if(x==spl[i]) return 1; return 0; } int chkoper(char x) { for(int i=0;i<13;i++) //function for checkin spl.char if(x==oper[i]) return 1; return 0; } int chkkey(char *x) { for(int i=0;i<4;i++) //function for checkin keywords { if(!strcmp(x,keys[i])) return 1; if(!strcmp(x,data[i])) return 2; } if(!buff[0]) return -1; return 0; } int rw=0,cl=1; //variables for row coloumn position int attr_assign(int symcount,int rw,int cl) { itoa(rw,row,10); itoa(cl-1,col,10); strcat(attr[symcount]," ("); //function for assigning the (row,coloumn) // position in atrribute coloumn strcat(attr[symcount],row); strcat(attr[symcount],","); strcat(attr[symcount],col); strcat(attr[symcount++],")"); return symcount; } void main() { clrscr(); cout<<" press enter to start compiler action on the specified input file--->"; if(getch()) clrscr(); char ch,temp; int match=0,symcount=0; fstream f; f.open("code.txt",ios::out|ios::in|ios::binary); //source code file opened x: while(ch!=EOF) { cl++; f.get(ch); if(isalpha(ch)) buff[bcount]=ch; while(isdigit(ch)) //checking for invalid identifiers { buff[bcount++]=ch; f.get(ch); if(isalpha(buff[0])) continue; //this continue is for allowing // identifiers like a11a if(isalpha(ch)) { buff[bcount++]=ch; strcpy(lex[symcount],buff); strcpy(token[symcount],msg[ERROR]); //making an ERROR entry strcpy(attr[symcount],msg[ERROR]); //in the symbol table symcount=attr_assign(symcount,rw,cl); bcount=flush_buff(buff); goto x; } } if(isalpha(ch)) //after identifier validity go ahead { if((isalpha(ch))||(isdigit(ch))) buff[bcount++]=ch; } //end of alpha check if((chkspl(ch))||(chkoper(ch))) //checkin ch for spl. characters or delimiters { temp=ch; if(temp==' '||temp==' ') { rw++; //if theres a line change,increment row no. cl=1; //coloumn no. reset to 1 } match=chkkey(buff); //checking buffer for keyword validity if(match==1) { /*assigning keyword entry*/ strcpy(lex[symcount],buff); strcpy(token[symcount],msg[KEY]); strcpy(attr[symcount],msg2[KWORD]); symcount=attr_assign(symcount,rw,cl); /*flushing the buffer*/ bcount=flush_buff(buff); } if(match==2) { strcpy(lex[symcount],buff); /*assigning keyword data entry*/ strcpy(token[symcount],msg[KEY]); strcpy(attr[symcount],msg2[DATA_TYPE]); symcount=attr_assign(symcount,rw,cl); bcount=flush_buff(buff); } if(!match) { strcpy(lex[symcount],buff); if(isdigit(buff[0])) /*assigning identifier or number entry*/ { strcpy(token[symcount],msg[5]); strcpy(attr[symcount],msg2[NUM]); } else { strcpy(token[symcount],msg[ID]); strcpy(attr[symcount],msg2[ID]); } symcount=attr_assign(symcount,rw,cl); bcount=flush_buff(buff); } if(temp!=' ') //not assignin any token to white space { if(chkspl(temp)) { if(temp==' ') temp='n'; //make n cuz it cant print if(temp=='(') strcpy(attr[symcount-2],msg2[RTYPE]); //if function is encountered lex[symcount][0]=temp; //go back and assign "return type" strcpy(token[symcount],msg[DELIM]); //to keyword strcpy(attr[symcount],msg2[DELIM]); symcount=attr_assign(symcount,rw,cl); } else { lex[symcount][0]=temp; strcpy(token[symcount],msg[OP]); //assignin operator entry strcpy(attr[symcount],msg2[OPER]); symcount=attr_assign(symcount,rw,cl); } bcount=flush_buff(buff); } }// end of spl char fn } display(symcount); //display the final symbol table f.close(); getch(); } void display(int symcount) { int j=0; strcpy(lex[symcount],NULL); //assign the last symbol table entry NULL //to avoid invalid or garbled entry cout<<" SYMBOL TABLE "; cout<<" LEXEMES"<<" "<<"TOKENS"<<" "<<"ATTRIBUTES "; cout<<"---------"<<" -------"<<" ----------"; cout<<" "; while(j<=(symcount-1)) { for(int p=0;lex[j][p]!=0;p++) cout<<lex[j][p]; cout<<" "; for(int q=0;token[j][q]!=0;q++) cout<<token[j][q]; cout<<" "; for(int r=0;attr[j][r]!=0;r++) cout<<attr[j][r]; cout<<" "; delay(100); j++; } cout<<" *note:the 'n' here is to represent SLASH n since it cant be printed"; } /// sample text file from which the code reads//// // code.txt START USING 4,15 ST 1,ONE L 2,TWO ONE DC F'1' TWO EQU 2 END catch(Exception e1){ } media.addImage(img, 0); try { media.waitForID(0); } catch (Exception e) {} }

Related Source Codes

Script Name Author
Moving ball screen saver karlmarx
The Classic Game of Snake & Ladder Lakshmi Narayana .A
Railway seat reservation question which comes in sapient VyomWorld
To calculate percentile Ravi Mathur
Send to folder ANIMESH SAHU
Analog clock and calendar Nazia & Rida
HIGH/LOW GAME MOLLY ARORA
Data structure (stack Implimentation) Swapnil B Adsure
Memory Game AnirudhSanyal
Easy Calc Anirudh Sanyal
GK Quiz Anirudh Sanyal
Hangman Game Manish Jain
Snakeman Manish Jain
Full month Calendar Nigi
Cursor shapes nigi

A D V E R T I S E M E N T




Google Groups Subscribe to SourceCodesWorld - Techies Talk
Email:

Free eBook - Interview Questions: Get over 1,000 Interview Questions in an eBook for free when you join JobsAssist. Just click on the button below to join JobsAssist and you will immediately receive the Free eBook with thousands of Interview Questions in an ebook when you join.

New! Click here to Add your Code!


ASP Home | C Home | C++ Home | COBOL Home | Java Home | Pascal Home
Source Codes Home Page

 Advertisements  

Google Search

Google

Source Codes World.com is a part of Vyom Network.

Vyom Network : Web Hosting | Dedicated Server | Free SMS, GRE, GMAT, MBA | Online Exams | Freshers Jobs | Software Downloads | Interview Questions | Jobs, Discussions | Placement Papers | Free eBooks | Free eBooks | Free Business Info | Interview Questions | Free Tutorials | Arabic, French, German | IAS Preparation | Jokes, Songs, Fun | Free Classifieds | Free Recipes | Free Downloads | Bangalore Info | Tech Solutions | Project Outsourcing, Web Hosting | GATE Preparation | MBA Preparation | SAP Info | Software Testing | Google Logo Maker | Freshers Jobs

Sitemap | Privacy Policy | Terms and Conditions
Copyright ©2003-2017 SourceCodesWorld.com, All Rights Reserved.
Page URL: http://www.sourcecodesworld.com/source/show.asp?ScriptID=750


Download Yahoo Messenger | Placement Papers | Free SMS | C Interview Questions | C++ Interview Questions | Quick2Host Review