freelanceprogrammers.org Forum Index » C

Need Help in parsing using Bison


View user's profile Post To page top
de_arumita2001 Posted: Wed Jun 25, 2003 6:23 pm


Joined: 25 Jun 2003

Posts: 1
Need Help in parsing using Bison
Hello friends ,
We are writing a parser for Httpd.conf
(Configuration file of Apache Server ) .
in this file`s second section there are many directives like
1.

<Directory >
...........
..........
</Directory>


<IfModule mod_dir.c>
...........
..........

</IfModule>

we have written parser for all thses directives but in if directive
we have nested if like this :

<IfModule mod_dir.c>
...........
..........
<IfModule mod_dir.c>
...........
</IfModule>

</IfModule>

our grammar is not working please suggest some other grammer our code
is included below
first file is Flex file ,second is bison file , third is the
configuration file containing the peice of
code to be parsed . and fourth is makefile so plz have a look .

Thanking you in Advance



-----------------------------------------
Flex File
----------------------------------------
%{
#include"ar.tab.h"
%}

%%
[
] {}
#.* {}
(<IfModule.*.[c|C]>) {printf("
If beg seen "); return(tbIF);}

"</IfModule>" {printf("
If end seen "); return
(teIF); }

DirectoryIndex.* {printf("
Dir If seen ");return
(tIFENTRY);}

UserDir.* {printf("
User If seen ");return
(tIFENTRY);}

MIMEMagicFile.* {printf("
MiME if seen "); return
(tIFENTRY);}

AddIcon.* {printf("
AddIcon IF seen "); return(tIFENTRY);}

DefaultIcon.* {printf("
default Icon IF seen "); return
(tIFENTRY);}

ReadmeName.* {printf("
readrName IF seen "); return(tIFENTRY);}

HeaderName.* {printf("
HeaderName IF seen "); return(tIFENTRY);}

IndexIgnore.* {printf("
Index Ignored IF seen "); return
(tIFENTRY);}

IndexOptions.* {printf("
Index Option IF seen "); return
(tIFENTRY);}

BrowserMatch.* {printf("
Brows IF seen "); return
(tIFENTRY);}

AddEncoding.* {printf("
AddEncoding IF seen "); return
(tIFENTRY);}

AddLanguage.* {printf("
AddLanguage IF seen "); return
(tIFENTRY);}

AddCharset.* {printf("
AddCharset IF seen "); return
(tIFENTRY);}

LanguagePriority.* {printf("
LanguagePriority IF seen "); return
(tIFENTRY);}

AddType.* {printf("
AddType IF seen "); return(tIFENTRY);}

%%
main1()
{
yyin=fopen("ar.conf","r");
if(!yyin)
{
{printf("
Error in file I/O
");}
exit(1);
}
yylex();
}


---------------------------
Bison File
---------------------------
%{

%}
%token tbIF teIF tIFENTRY
%%



IF : tbIF OPTIONAL_ENTRY_OF_IF teIF IF { printf("
Done
"); } |


OPTIONAL_ENTRY_OF_IF : tIFENTRY OPTIONAL_ENTRY_OF_IF | IF |;


%%
extern FILE *yyin;

main()
{
yyin=fopen("ar.conf","r");
if(!yyin)
{
{printf("
Error in file I/O
");}
exit(1);
}

do {
yyparse();
} while(!feof(yyin));
}

yyerror(char *s )
{
printf("

Parsing Error : %s
",s);

}


------------------------------
Configuration file to be parsed
-----------------------------


<IfModule mod_dir.c>
DirectoryIndex index.html index.php index.htm index.shtml
index.cgi
</IfModule>


<IfModule mod_userdir.c>
UserDir public_html
</IfModule>


<IfModule mod_mime_magic.c>
MIMEMagicFile share/magic
</IfModule>

<IfModule mod_autoindex.c>

#
# FancyIndexing: whether you want fancy directory indexing or
standard
#
IndexOptions FancyIndexing NameWidth=*

#
# AddIcon* directives tell the server which icon to show for
different
# files or filename extensions. These are only displayed for
# FancyIndexed directories.
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/deb.gif .deb

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

#
# DefaultIcon: which icon to show for files which do not have an
icon
# explicitly set.
#
DefaultIcon /icons/unknown.gif

#
# AddDescription: allows you to place a short description after a
file in
# server-generated indexes. These are only displayed for
FancyIndexed
# directories.
# Format: AddDescription "description" filename
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

#
# ReadmeName: the name of the README file the server will look
for by
# default, and append to directory listings.
#
# HeaderName: the name of a file which should be prepended to
# directory indexes.
#
# The server will first look for name.html and include it if
found.
# If name.html doesn`t exist, the server will then look for
name.txt
# and include it as plaintext if found.
#
ReadmeName README
HeaderName HEADER

#
# IndexIgnore: a set of filenames which directory indexing should
ignore
# and not include in the listing. Shell-style wildcarding is
permitted.
#
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

</IfModule>

<IfModule mod_setenvif.c>
#
# The following directives modify normal HTTP response behavior.
# The first directive disables keepalive for Netscape 2.x and
browsers that
# spoof it. There are known problems with these browser
implementations.
# The second directive is for Microsoft Internet Explorer 4.0b2
# which has a broken HTTP/1.1 implementation and does not properly
# support keepalive when it is used on 301 or 302 (redirect)
responses.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-
response-1.0

#
# The following directive disables HTTP/1.1 responses to browsers
which
# are in violation of the HTTP/1.0 spec by not being able to grok
a
# basic 1.1 response.
#
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0
</IfModule>


<IfModule mod_mime.c>

# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+)
# uncompress information on the fly. Note: Not all browsers
support
# this. Despite the name similarity, the following Add*
directives
# have nothing to do with the FancyIndexing customization
# directives above.

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

#
# AddLanguage: allows you to specify the language of a document.
You can
# then use content negotiation to give a browser a file in a
language
# it can understand.
#
# Note 1: The suffix does not have to be the same as the language
# keyword --- those with documents in Polish (whose net-standard
# language code is pl) may wish to use "AddLanguage pl .po" to
# avoid the ambiguity with the common suffix for perl scripts.
#
# Note 2: The example entries below illustrate that in quite
# some cases the two character `Language` abbriviation is not
# identical to the two character `Country` code for its country,
# E.g. `Danmark/dk` versus `Danish/da`.
#
# Note 3: In the case of `ltz` we violate the RFC by using a
three char
# specifier. But there is `work in progress` to fix this and get
# the reference data for rfc1766 cleaned up.
#
# Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
# French (fr) - German (de) - Greek-Modern (el)
# Italian (it) - Portugese (pt) - Luxembourgeois* (ltz)
# Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
# Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
#
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .se
AddLanguage cz .cz

# LanguagePriority: allows you to give precedence to some
languages
# in case of a tie during content negotiation.
#
# Just list the languages in decreasing order of preference. We
have
# more or less alphabetized them here. You probably want to change
# this.
#
<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca
es sv
</IfModule>


#
# AddType allows you to tweak mime.types without actually editing
# it, or to make certain files to be certain types.
#
# For example, the PHP 3.x module (not part of the Apache
# distribution - see http://www.php.net) will typically use:
#
#AddType application/x-httpd-php3 .php3
#AddType application/x-httpd-php3-source .phps
#
# And for PHP 4.x, use:
#
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

AddType application/x-tar .tgz
AddType image/bmp .bmp

# hdml
AddType text/x-hdml .hdml

#
# AddHandler allows you to map certain file extensions
to "handlers",
# actions unrelated to filetype. These can be either built into
# the server or added with the Action command (see below).
#
# If you want to use server side includes, or CGI outside
# ScriptAliased directories, uncomment the following lines.
#
# To use CGI scripts:
#
#AddHandler cgi-script .cgi .sh .pl

#
# To use server-parsed HTML files
#
#AddType text/html .shtml
#AddHandler server-parsed .shtml

#
# Uncomment the following line to enable Apache`s send-asis HTTP
# file feature.
#
#AddHandler send-as-is asis

#
# If you wish to use server-parsed imagemap files, use
#
#AddHandler imap-file map

#
# To enable type maps, you might want to use
#
#AddHandler type-map var

</IfModule>

-------------------------
Makefile
------------------------
test : lex.yy.o ar.tab.o
gcc -o test lex.yy.o ar.tab.o -lfl
ar.tab.o : ar.tab.c
gcc -c ar.tab.c
ar.tab.c ar.tab.h : ar.y
bison -d ar.y
lex.yy.o : lex.yy.c ar.tab.h
gcc -c lex.yy.c
lex.yy.c : ar.l
flex ar.l
clean:
@echo "Removing object files..."
rm -f *.o *.c
Reply with quote
Send private message
Post new topic Reply to topic
Display posts from previous:   
 

All times are GMT
Page 1 of 1
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Freelace Website Designer - Customer web design and software building.
China Wholesale - Electronics Products
Character Studio - Tutorials and Help