dgp korzysta z normalnego common.cc i bierze wspolne parametry z cmdline_common.ggo
git-svn-id: svn://atos.wmid.amu.edu.pl/utt@35 e293616e-ec6a-49c2-aa92-f4a8b91c5d16
This commit is contained in:
parent
12d8443b2c
commit
28e9ae0020
@ -2,13 +2,16 @@
|
|||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
LIB_PATH=../../lib
|
LIB_PATH=../../lib
|
||||||
|
COMMON_PATH=../common
|
||||||
|
CMDLINE_FILE='"../dgp/cmdline.h"'
|
||||||
|
|
||||||
|
|
||||||
#vpath %.o .
|
#vpath %.o .
|
||||||
|
|
||||||
CXXFLAGS = -O2 -static
|
CXXFLAGS = -O2 -static
|
||||||
|
|
||||||
sources = main.cc grammar.cc symbol.cc mgraph.cc sgraph.cc dgp0.cc cmdline.cc \
|
sources = main.cc grammar.cc symbol.cc mgraph.cc sgraph.cc dgp0.cc cmdline.cc \
|
||||||
common.cc global.cc
|
$(COMMON_PATH)/common.cc global.cc
|
||||||
|
|
||||||
bin = dgp
|
bin = dgp
|
||||||
|
|
||||||
@ -21,15 +24,24 @@ ${bin}: ${objs}
|
|||||||
include $(sources:.cc=.d)
|
include $(sources:.cc=.d)
|
||||||
|
|
||||||
%.o: %.cc
|
%.o: %.cc
|
||||||
${CXX} -c ${CXXFLAGS} -o $@ $<
|
${CXX} -D _CMDLINE_FILE=$(CMDLINE_FILE) -c ${CXXFLAGS} -o $@ $<
|
||||||
|
|
||||||
%.d: %.cc
|
%.d: %.cc
|
||||||
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \
|
$(CC) -MM $(CPPFLAGS) $< > $@.$$$$; \
|
||||||
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||||
rm -f $@.$$$$
|
rm -f $@.$$$$
|
||||||
|
|
||||||
cmdline.cc cmdline.h : cmdline.ggo
|
# stare:
|
||||||
gengetopt --c-extension=cc -i cmdline.ggo
|
# cmdline.cc cmdline.h : cmdline.ggo
|
||||||
|
# gengetopt --c-extension=cc -i cmdline.ggo
|
||||||
|
# nowe
|
||||||
|
cmdline.cc cmdline.h: cmdline.ggo
|
||||||
|
gengetopt -i cmdline.ggo --c-extension=cc --conf-parser
|
||||||
|
|
||||||
|
cmdline.ggo: cmdline_dgp.ggo ../common/cmdline_common.ggo
|
||||||
|
cat cmdline_dgp.ggo ../common/cmdline_common.ggo > cmdline.ggo
|
||||||
|
# endnowe
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm ${bin} ${objs} cmdline.cc cmdline.h
|
rm ${bin} ${objs} cmdline.cc cmdline.h
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
package "dgp"
|
|
||||||
version "0.1"
|
|
||||||
|
|
||||||
option "process" p "Process segments with this tag."
|
|
||||||
string no multiple
|
|
||||||
|
|
||||||
option "select" s "Select only segments with this field. [Not implemented.]"
|
|
||||||
string no multiple
|
|
||||||
|
|
||||||
option "ignore" S "Select only segments without this field. [Not implemented]"
|
|
||||||
string no multiple
|
|
||||||
|
|
||||||
option "input" f "Input file"
|
|
||||||
string typestr="filename" no
|
|
||||||
|
|
||||||
option "output" o "Output file"
|
|
||||||
string typestr="filename" no
|
|
||||||
|
|
||||||
option "failed" e "Fail file"
|
|
||||||
string typestr="filename" no
|
|
||||||
|
|
||||||
option "copy" c "Copy unprocessed"
|
|
||||||
flag off
|
|
||||||
|
|
||||||
option "grammar" g "Grammar file"
|
|
||||||
string typestr="filename" default="dgp.dg"
|
|
||||||
|
|
||||||
option "long" l "Long output"
|
|
||||||
flag off
|
|
||||||
|
|
||||||
option "interactive" - "Interactive use."
|
|
||||||
flag off
|
|
||||||
|
|
||||||
option "debug" d "Debug mode."
|
|
||||||
flag off
|
|
||||||
|
|
||||||
option "info" i "Print info.
|
|
||||||
h - heads d - dependents
|
|
||||||
s - sets
|
|
||||||
c - constraints n - node/arc counts t - parse time
|
|
||||||
"
|
|
||||||
string default="gh"
|
|
42
app/src/dgp/cmdline_dgp.ggo
Normal file
42
app/src/dgp/cmdline_dgp.ggo
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package "dgp"
|
||||||
|
version "0.1"
|
||||||
|
|
||||||
|
#option "process" p "Process segments with this tag."
|
||||||
|
# string no multiple
|
||||||
|
|
||||||
|
#option "select" s "Select only segments with this field. [Not implemented.]"
|
||||||
|
# string no multiple
|
||||||
|
|
||||||
|
#option "ignore" S "Select only segments without this field. [Not implemented]"
|
||||||
|
# string no multiple
|
||||||
|
|
||||||
|
#option "input" f "Input file"
|
||||||
|
# string typestr="filename" no
|
||||||
|
|
||||||
|
#option "output" o "Output file"
|
||||||
|
# string typestr="filename" no
|
||||||
|
|
||||||
|
#option "failed" e "Fail file"
|
||||||
|
# string typestr="filename" no
|
||||||
|
|
||||||
|
#option "copy" c "Copy unprocessed"
|
||||||
|
# flag off
|
||||||
|
|
||||||
|
option "grammar" g "Grammar file"
|
||||||
|
string typestr="filename" default="dgp.dg"
|
||||||
|
|
||||||
|
option "long" l "Long output"
|
||||||
|
flag off
|
||||||
|
|
||||||
|
#option "interactive" - "Interactive use."
|
||||||
|
# flag off
|
||||||
|
|
||||||
|
option "debug" d "Debug mode."
|
||||||
|
flag off
|
||||||
|
|
||||||
|
option "info" - "Print info.
|
||||||
|
h - heads d - dependents
|
||||||
|
s - sets
|
||||||
|
c - constraints n - node/arc counts t - parse time
|
||||||
|
"
|
||||||
|
string default="gh"
|
@ -1,39 +0,0 @@
|
|||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
FILE* inputf=stdin;
|
|
||||||
FILE* outputf=stdout;
|
|
||||||
FILE* failedf=stdout;
|
|
||||||
bool copy_processed=0;
|
|
||||||
|
|
||||||
void process_common_options(gengetopt_args_info args)
|
|
||||||
{
|
|
||||||
if(args.help_given)
|
|
||||||
cmdline_parser_print_help ();
|
|
||||||
|
|
||||||
if(args.input_given)
|
|
||||||
if(!(inputf=fopen(args.input_arg,"r")))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"No such file: %s.\n", args.input_arg);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.output_given)
|
|
||||||
if(!(outputf=fopen(args.output_arg,"w")))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Cannot open output file: %s.\n", args.output_arg);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(args.failed_given)
|
|
||||||
if(!(failedf=fopen(args.failed_arg,"w")))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Cannot open output file: %s.\n", args.failed_arg);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(args.copy_given)
|
|
||||||
copy_processed=true;
|
|
||||||
}
|
|
@ -1,277 +0,0 @@
|
|||||||
#ifndef __COMMON_H
|
|
||||||
#define __COMMON_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#include "cmdline.h"
|
|
||||||
#include "const.hh"
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************
|
|
||||||
* Stale dotyczace wejscia/wyjscia
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define EMPTYFORM '*'
|
|
||||||
#define INFIELD_SEP ':'
|
|
||||||
#define MAXAUX 64
|
|
||||||
#define FIELD_SEP " \t\n"
|
|
||||||
|
|
||||||
/**************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern FILE* inputf;
|
|
||||||
extern FILE* outputf;
|
|
||||||
extern FILE* failedf;
|
|
||||||
|
|
||||||
extern char* input_filename;
|
|
||||||
extern char* output_filename;
|
|
||||||
extern char* failed_filename;
|
|
||||||
|
|
||||||
extern bool copy_processed;
|
|
||||||
extern bool append_output;
|
|
||||||
extern bool append_failed;
|
|
||||||
|
|
||||||
extern void process_common_options(gengetopt_args_info args);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************/
|
|
||||||
/*
|
|
||||||
parameters:
|
|
||||||
-seg - segment
|
|
||||||
-name - field name
|
|
||||||
+val - field contents
|
|
||||||
return value:
|
|
||||||
1 if specified field exists, 0 otherwise
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline int getfield(const char* seg, const char* pref, char* val)
|
|
||||||
{
|
|
||||||
const char* p=seg;
|
|
||||||
|
|
||||||
while(*p==' ') ++p;
|
|
||||||
|
|
||||||
pos:
|
|
||||||
if(isdigit(*p) or *p=='*')
|
|
||||||
if(*pref=='1') return sscanf(p,"%s",val); else while(*p!=' ') ++p;
|
|
||||||
else
|
|
||||||
if(*pref=='1') return 0; else goto type;
|
|
||||||
|
|
||||||
while(*p==' ') ++p;
|
|
||||||
|
|
||||||
len:
|
|
||||||
if(isdigit(*p) or *p=='*')
|
|
||||||
if(*pref=='2') return sscanf(p,"%s",val); else while(*p!=' ') ++p;
|
|
||||||
else
|
|
||||||
if(*pref=='2') return 0; else goto type;
|
|
||||||
|
|
||||||
while(*p==' ') ++p;
|
|
||||||
|
|
||||||
type:
|
|
||||||
|
|
||||||
if(*pref=='3') return sscanf(p,"%s",val); else while(*p!=' ') ++p;
|
|
||||||
|
|
||||||
while(*p==' ') ++p;
|
|
||||||
|
|
||||||
form:
|
|
||||||
if(*pref=='4') return sscanf(p,"%s",val); else while(*p!=' ') ++p;
|
|
||||||
|
|
||||||
while(*p==' ') ++p;
|
|
||||||
|
|
||||||
annotation:
|
|
||||||
do p=strstr(p,pref); while(p!=NULL && *(p-1)!=' ' && *(p-1)!='\t');
|
|
||||||
|
|
||||||
if(p==NULL) return 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
p+=strlen(pref);
|
|
||||||
int len=strcspn(p,FIELD_SEP "\n\r\f\0");
|
|
||||||
strncpy(val,p,len);
|
|
||||||
val[len]='\0';
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
parameters:
|
|
||||||
+seg - segment
|
|
||||||
-pref - prefix of the new field
|
|
||||||
-val - contents of the new field
|
|
||||||
return value:
|
|
||||||
1 - success, 0 - fail (limit on segment length exceeded)
|
|
||||||
*/
|
|
||||||
inline int addfield(char *seg, const char *pref, const char *val)
|
|
||||||
// zalozenie, ze seg konczy sie znakiem \n
|
|
||||||
{
|
|
||||||
if(strlen(seg)+strlen(pref)+strlen(val) >= MAXLINE) return 0; // bezpieczniej, ale wolniej
|
|
||||||
|
|
||||||
int seglen=strlen(seg);
|
|
||||||
sprintf(seg+(seglen-1)," %s%s\n",pref,val);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool processseg(const char* s, gengetopt_args_info& args)
|
|
||||||
{
|
|
||||||
bool ret = !args.process_given;
|
|
||||||
char field[MAXAUX];
|
|
||||||
|
|
||||||
if(args.process_given)
|
|
||||||
{
|
|
||||||
getfield(s,"3",field);
|
|
||||||
for(int i=0; i<args.process_given; ++i)
|
|
||||||
if(strcmp(args.process_arg[i],field)==0)
|
|
||||||
{
|
|
||||||
ret=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i=0; i<args.select_given; ++i)
|
|
||||||
if(! getfield(s,args.select_arg[i],field))
|
|
||||||
ret=false;
|
|
||||||
|
|
||||||
for(int i=0; i<args.ignore_given; ++i)
|
|
||||||
if(getfield(s,args.ignore_arg[i],field))
|
|
||||||
ret=false;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* DEPRICATED */
|
|
||||||
|
|
||||||
|
|
||||||
/* definicja struktury wejscia/wyjscia
|
|
||||||
*/
|
|
||||||
struct Segment
|
|
||||||
{
|
|
||||||
int filepos, len;
|
|
||||||
char* tag;
|
|
||||||
char* form;
|
|
||||||
char* aux[MAXAUX];
|
|
||||||
int auxn;
|
|
||||||
|
|
||||||
bool parse(char* line);
|
|
||||||
char* getfield(char* fieldname);
|
|
||||||
void print(char* line);
|
|
||||||
bool addfield(char* s);
|
|
||||||
bool clearfields();
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Sprawdza czy nalezy przetwarzac dany segment.
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool process_seg(Segment& s, gengetopt_args_info& args)
|
|
||||||
{
|
|
||||||
bool ret = !args.process_given;
|
|
||||||
|
|
||||||
for(int i=0; i<args.process_given; ++i)
|
|
||||||
if(strcmp(args.process_arg[i],s.tag)==0)
|
|
||||||
{
|
|
||||||
ret=true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i=0; i<args.select_given; ++i)
|
|
||||||
if(! s.getfield(args.select_arg[i]))
|
|
||||||
ret=false;
|
|
||||||
|
|
||||||
for(int i=0; i<args.ignore_given; ++i)
|
|
||||||
if(s.getfield(args.ignore_arg[i]))
|
|
||||||
ret=false;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FUNKCJE OBSLUGUJACE WEJSCIE/WYJSCIE
|
|
||||||
*/
|
|
||||||
// napisy zostaj na miejscu (w line), tylko wskazniki sa ustawian
|
|
||||||
// i zara dopisywane zera s dopisywane
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool Segment::parse(char* line)
|
|
||||||
{
|
|
||||||
auxn=0;
|
|
||||||
char* field;
|
|
||||||
if((field=strtok(line,FIELD_SEP))!=NULL)
|
|
||||||
filepos=atoi(field); // nie sprawdzana poprawnosc
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
if((field=strtok(NULL,FIELD_SEP))!=NULL)
|
|
||||||
len=atoi(field); // nie sprawdzana poprawnosc
|
|
||||||
else return false;
|
|
||||||
if((tag=strtok(NULL,FIELD_SEP))==NULL) return false;
|
|
||||||
if((form=strtok(NULL,FIELD_SEP))==NULL)
|
|
||||||
return false;
|
|
||||||
/* else */
|
|
||||||
/* if(form[0] == EMPTYFORM && form[1] =='\0') */
|
|
||||||
/* form=NULL; */
|
|
||||||
|
|
||||||
while((aux[auxn]=strtok(NULL,FIELD_SEP))!=NULL) ++auxn;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline char* Segment::getfield(char* f)
|
|
||||||
{
|
|
||||||
int flen=strlen(f);
|
|
||||||
for(int i=0; i<auxn; ++i)
|
|
||||||
if(strncmp(aux[i],f,flen)==0 && aux[i][flen]==INFIELD_SEP)
|
|
||||||
return aux[i]+flen+1;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool Segment::clearfields() {
|
|
||||||
for (int i=0; i<auxn; ++i) {
|
|
||||||
// free(aux[i]);
|
|
||||||
aux[i] = NULL;
|
|
||||||
}
|
|
||||||
auxn=0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline // NIEEFEKTYWNE
|
|
||||||
void Segment::print(char* line)
|
|
||||||
{
|
|
||||||
sprintf(line,"%04d %02d %s", filepos, len, tag);
|
|
||||||
if(form)
|
|
||||||
{
|
|
||||||
strcat(line," ");
|
|
||||||
strcat(line,form);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(auxn)
|
|
||||||
strcat(line," *");
|
|
||||||
|
|
||||||
for(int i=0; i<auxn; ++i)
|
|
||||||
{
|
|
||||||
strcat(line," ");
|
|
||||||
strcat(line,aux[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(line,"\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline
|
|
||||||
bool Segment::addfield(char* s)
|
|
||||||
{
|
|
||||||
if(auxn<MAXAUX)
|
|
||||||
{
|
|
||||||
aux[auxn++]=s;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -12,7 +12,7 @@
|
|||||||
#include "sgraph.hh"
|
#include "sgraph.hh"
|
||||||
#include "grammar.hh"
|
#include "grammar.hh"
|
||||||
#include "dgp0.hh"
|
#include "dgp0.hh"
|
||||||
#include "common.h"
|
#include "../common/common.h"
|
||||||
|
|
||||||
#define MAXSEGMENTS 500
|
#define MAXSEGMENTS 500
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ main(int argc, char* argv[])
|
|||||||
|
|
||||||
char segtype[80];
|
char segtype[80];
|
||||||
|
|
||||||
seg_mnode[segcount] = processseg(line, args) ? mgraph.add_node(line) : -1;
|
seg_mnode[segcount] = process_seg(line, args) ? mgraph.add_node(line) : -1;
|
||||||
|
|
||||||
segcount++;
|
segcount++;
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include "mgraph.hh"
|
#include "mgraph.hh"
|
||||||
#include "thesymbols.hh"
|
#include "thesymbols.hh"
|
||||||
#include "const.hh"
|
#include "const.hh"
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "const.hh"
|
#include "const.hh"
|
||||||
#include "thesymbols.hh"
|
#include "thesymbols.hh"
|
||||||
#include "common.h"
|
#include "../common/common.h"
|
||||||
|
|
||||||
class MNode
|
class MNode
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user