diff options
Diffstat (limited to 'recipes/lemon')
-rw-r--r-- | recipes/lemon/files/lemon.1 | 63 | ||||
-rw-r--r-- | recipes/lemon/files/snprintf.patch | 94 | ||||
-rw-r--r-- | recipes/lemon/lemon-native_3.5.4.bb | 11 | ||||
-rw-r--r-- | recipes/lemon/lemon.inc | 15 | ||||
-rw-r--r-- | recipes/lemon/lemon_3.5.4.bb | 11 |
5 files changed, 194 insertions, 0 deletions
diff --git a/recipes/lemon/files/lemon.1 b/recipes/lemon/files/lemon.1 new file mode 100644 index 0000000000..914ee07013 --- /dev/null +++ b/recipes/lemon/files/lemon.1 @@ -0,0 +1,63 @@ +.Dd 2002-10-04 +.Dt LEMON 1 +.Os "Debian GNU/Linux" +.\" Manual page created by Guus Sliepen <guus@debian.org> +.Sh NAME +.Nm lemon +.Nd The Lemon Parser Generator +.Sh SYNOPSIS +.Nm +.Op Fl bcgmqsx +.Ar input +.Sh DESCRIPTION +.Nm +is an LALR(1) parser generator for C or C++. +It does the same job as bison and yacc. +But +.Nm +is not another bison or yacc clone. +It uses a different grammar syntax which is designed to reduce the number of coding errors. +.Nm +also uses a more sophisticated parsing engine that is faster than yacc and bison +and which is both reentrant and thread-safe. +Furthermore, +.Nm +implements features that can be used to eliminate resource leaks, +making is suitable for use in long-running programs such as graphical user interfaces or embedded controllers. +.Pp +.Nm +will read the grammer from +.Ar input +and write out a parser for that grammar in the C language. +.Sh OPTIONS +.Bl -tag -width indent +.It Fl b +Print only the basis in report. +.It Fl c +Don't compress the action table. +.It Fl g +Print grammar without actions. +.It Fl m +Output a makeheaders compatible file. +.It Fl q +(Quiet) Don't print the report file. +.It Fl s +Print parser stats to standard output. +.It Fl x +Print the version number. +.El +.Sh FILES +.Bl -tag -width indent +.It Pa /usr/share/lemon/lempar.c +Driver template for the +.Nm +parser generator. +.El +.Sh AUTHOR +.Nm +has been written by +.An D. Richard Hipp Aq drh@hwaci.com . +.Pp +This manual page was written by +.An Guus Sliepen Aq guus@debian.org +for the Debian GNU/Linux system. diff --git a/recipes/lemon/files/snprintf.patch b/recipes/lemon/files/snprintf.patch new file mode 100644 index 0000000000..5ce1324f82 --- /dev/null +++ b/recipes/lemon/files/snprintf.patch @@ -0,0 +1,94 @@ +--- lemon.c 2004-04-24 14:59:13.000000000 +0200 ++++ lemon.c 2004-07-27 15:31:40.000000000 +0200 +@@ -1272,15 +1272,15 @@ + va_start(ap, format); + /* Prepare a prefix to be prepended to every output line */ + if( lineno>0 ){ +- sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno); ++ snprintf(prefix,sizeof prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno); + }else{ +- sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename); ++ snprintf(prefix,sizeof prefix,"%.*s: ",PREFIXLIMIT-10,filename); + } + prefixsize = strlen(prefix); + availablewidth = LINEWIDTH - prefixsize; + + /* Generate the error message */ +- vsprintf(errmsg,format,ap); ++ vsnprintf(errmsg,sizeof errmsg,format,ap); + va_end(ap); + errmsgsize = strlen(errmsg); + /* Remove trailing '\n's from the error message. */ +@@ -2675,7 +2675,7 @@ + while( cfp ){ + char buf[20]; + if( cfp->dot==cfp->rp->nrhs ){ +- sprintf(buf,"(%d)",cfp->rp->index); ++ snprintf(buf,sizeof buf,"(%d)",cfp->rp->index); + fprintf(fp," %5s ",buf); + }else{ + fprintf(fp," "); +@@ -2721,7 +2721,7 @@ + c = *cp; + *cp = 0; + path = (char *)malloc( strlen(argv0) + strlen(name) + 2 ); +- if( path ) sprintf(path,"%s/%s",argv0,name); ++ if( path ) snprintf(path,sizeof path,"%s/%s",argv0,name); + *cp = c; + }else{ + extern char *getenv(); +@@ -2734,7 +2734,7 @@ + if( cp==0 ) cp = &pathlist[strlen(pathlist)]; + c = *cp; + *cp = 0; +- sprintf(path,"%s/%s",pathlist,name); ++ snprintf(path,sizeof path,"%s/%s",pathlist,name); + *cp = c; + if( c==0 ) pathlist = ""; + else pathlist = &cp[1]; +@@ -2814,14 +2814,16 @@ + + cp = strrchr(lemp->filename,'.'); + if( cp ){ +- sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); ++ snprintf(buf,sizeof buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); + }else{ +- sprintf(buf,"%s.lt",lemp->filename); ++ snprintf(buf,sizeof buf,"%s.lt",lemp->filename); + } + if( access(buf,004)==0 ){ + tpltname = buf; + }else if( access(templatename,004)==0 ){ + tpltname = templatename; ++ }else if( access("/usr/share/lemon/lempar.c",004)==0 ){ ++ tpltname = "/usr/share/lemon/lempar.c"; + }else{ + tpltname = pathsearch(lemp->argv0,templatename,0); + } +@@ -2833,7 +2835,7 @@ + } + in = fopen(tpltname,"r"); + if( in==0 ){ +- fprintf(stderr,"Can't open the template file \"%s\".\n",templatename); ++ fprintf(stderr,"Can't open the template file \"%s\".\n",tpltname); + lemp->errorcnt++; + return 0; + } +@@ -3447,7 +3449,7 @@ + /* Generate a table containing the symbolic name of every symbol + */ + for(i=0; i<lemp->nsymbol; i++){ +- sprintf(line,"\"%s\",",lemp->symbols[i]->name); ++ snprintf(line,sizeof line,"\"%s\",",lemp->symbols[i]->name); + fprintf(out," %-15s",line); + if( (i&3)==3 ){ fprintf(out,"\n"); lineno++; } + } +@@ -3562,7 +3564,7 @@ + in = file_open(lemp,".h","r"); + if( in ){ + for(i=1; i<lemp->nterminal && fgets(line,LINESIZE,in); i++){ +- sprintf(pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); ++ snprintf(pattern,sizeof pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); + if( strcmp(line,pattern) ) break; + } + fclose(in); diff --git a/recipes/lemon/lemon-native_3.5.4.bb b/recipes/lemon/lemon-native_3.5.4.bb new file mode 100644 index 0000000000..55a083ccb7 --- /dev/null +++ b/recipes/lemon/lemon-native_3.5.4.bb @@ -0,0 +1,11 @@ +require lemon.inc + +PR = "r0" + +inherit native + +do_stage() { + install -d ${STAGING_BINDIR} + install -m 0755 lemon ${STAGING_BINDIR} + install -m 0644 lempar.c ${STAGING_BINDIR} +} diff --git a/recipes/lemon/lemon.inc b/recipes/lemon/lemon.inc new file mode 100644 index 0000000000..7742fb8118 --- /dev/null +++ b/recipes/lemon/lemon.inc @@ -0,0 +1,15 @@ +DESCRIPTION = "The Lemon Parser Generator" +HOMEPAGE = "http://www.hwaci.com/sw/lemon/" +LICENSE = "PD" +PRIORITY = "optional" +SECTION = "devel" + +SRC_URI = "http://www.sqlite.org/sqlite-${PV}.tar.gz \ + file://lemon.1" + +S = "${WORKDIR}/sqlite-${PV}/tool" + +do_compile() { + ${CC} ${CFLAGS} lemon.c -c -o lemon.o + ${CCLD} ${LDFLAGS} lemon.o -o lemon +} diff --git a/recipes/lemon/lemon_3.5.4.bb b/recipes/lemon/lemon_3.5.4.bb new file mode 100644 index 0000000000..4a7e5e77f0 --- /dev/null +++ b/recipes/lemon/lemon_3.5.4.bb @@ -0,0 +1,11 @@ +require lemon.inc + +PR = "r0" + +do_install() { + install -d ${D}${bindir} + install -m 0755 lemon ${D}${bindir} + install -m 0644 lempar.c ${D}${bindir} + install -d ${D}${mandir}/man1 + install -m 0644 ${WORKDIR}/lemon.1 ${D}${mandir}/man1/ +} |