Parse-Flex
view release on metacpan or search on metacpan
lib/Parse/Flex/Generate.pm view on Meta::CPAN
try.pl:
perl $(OPTS) $@
lex.yy.c: custom.l
flex $(fopt) $^
$(PACK).c: $(PACK).xs
/usr/bin/perl /usr/share/perl/5.8/ExtUtils/xsubpp -typemap /usr/share/perl/5.8/ExtUtils/typemap $(PACK).xs $(noerr) > $(PACK).xsc && mv $(PACK).xsc $(PACK).c
$(PACK).o: $(PACK).c
gcc -c -o $@ $(PFLAGS) $^
$(PACK).so: $(OBJ)
gcc -s -shared -L/usr/local/lib -o $@ $^
clean:
rm -f $(OBJ) *.o *.a $(PACK).c *.xs lex.yy.[co]
mv:
mv $(PACK).pm $(PACK).so ..
realclean: clean
rm -f $(PACK).so $(PACK).pm
$(PACK).pm: $(PACK).so
echo $(PM_DATA) > $@
EOM
($msg =~ s/Flexer/$package/g) ;
($msg =~ s/custom[.]l/$grammar/g) ;
$msg =~ s/fopt = -Cf /fopt = $lflags/ if $lflags;
$msg =~ s/ifdef n/ifndef n/ if $verbose;
$msg;
}
sub xs_content {
my $package = shift || die;
(my $msg = <<'EOM' ) =~ s/Flexer/$package/g;
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
extern char *yytext;
extern int yy_flex_debug, yylineno, yyleng;
extern FILE *yyin, *yyout ;
extern int maxwrap;
extern char* wrap[];
MODULE = Flexer PACKAGE = Flexer
void
yylex()
PPCODE:
char* id = 0;
if (id = (char*) yylex() ) {
XPUSHs (sv_2mortal(newSVpv(id,0)));
XPUSHs (sv_2mortal(newSVpv( yytext, 0)));
XSRETURN(2);
}
XSRETURN_EMPTY;
void
yylex_int()
PPCODE:
int id;
if (id = (int) yylex() ) {
XPUSHs (sv_2mortal(newSViv(id)));
XPUSHs (sv_2mortal(newSVpv( yytext, 0)));
XSRETURN(2);
}
XSRETURN_EMPTY;
void
yyin( file )
char* file
CODE:
if ( (yyin=fopen(file,"r")) == NULL ) {
perror("yyin");
}
void
yyout( file )
char* file
CODE:
if ( (yyout=fopen(file,"w")) == NULL ) {
perror("yyout");
}
void
yyset_in( fd )
FILE *fd
CODE:
yyin = fd;
void
yyset_out( fd )
FILE *fd
CODE:
yyout = fd;
FILE*
yyget_in( )
CODE:
RETVAL = yyin;
OUTPUT:
RETVAL
FILE*
yyget_out( )
CODE:
RETVAL = yyout;
OUTPUT:
RETVAL
int
yyget_lineno()
CODE:
RETVAL = yylineno ;
OUTPUT:
RETVAL
( run in 1.741 second using v1.01-cache-2.11-cpan-5511b514fd6 )