summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-13 03:51:20 +0000
committergraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-13 03:51:20 +0000
commit84009c98d9a0a2e3ecd801ebb92ed47ee3f3328b (patch)
tree9fa1f2467d4c7b82444652498d31622c99d69ebd
parent46349d90291dc755225863552eb19beb1038c505 (diff)
binarized cfg names improved
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@538 ec762483-ff6d-05da-a07a-a48fb63a330f
-rwxr-xr-xdecoder/cfg.cc4
-rwxr-xr-xdecoder/cfg_format.h3
-rwxr-xr-xdecoder/nt_span.h22
-rwxr-xr-xutils/named_enum.h4
4 files changed, 22 insertions, 11 deletions
diff --git a/decoder/cfg.cc b/decoder/cfg.cc
index aa9e5f30..8fc5b10f 100755
--- a/decoder/cfg.cc
+++ b/decoder/cfg.cc
@@ -22,8 +22,8 @@ WordID BinName(CFG::BinRhs const& b,CFG::NTs const& N,CFG::NTs const& M)
int n=w; if (n>0) o << TD::Convert(n); \
else { \
int i=-n; \
- CFG::NT const&nt = i<nn?N[i]:M[i-nn]; \
- o << nt.from << i; } \
+ if (i<nn) o<<N[i].from<<i; else o<<M[i-nn].from; \
+ } \
} while(0)
BinNameOWORD(b.first);
diff --git a/decoder/cfg_format.h b/decoder/cfg_format.h
index ccf6e3fa..d56d42f2 100755
--- a/decoder/cfg_format.h
+++ b/decoder/cfg_format.h
@@ -67,7 +67,8 @@ struct CFGFormat {
o<<nt_prefix;
if (nt_span)
cfg.print_nt_name(o,id);
- o<<id;
+ else
+ o<<id;
}
template <class CFG>
diff --git a/decoder/nt_span.h b/decoder/nt_span.h
index 46234b07..a918f301 100755
--- a/decoder/nt_span.h
+++ b/decoder/nt_span.h
@@ -8,10 +8,15 @@
struct Span {
int l,r;
Span() : l(-1) { }
+ bool is_null() const { return l<0; }
+ void print(std::ostream &o,char const* for_null="") const {
+ if (is_null())
+ o<<for_null;
+ else
+ o<<'<'<<l<<','<<r<<'>';
+ }
friend inline std::ostream &operator<<(std::ostream &o,Span const& s) {
- if (s.l<0)
- return o;
- return o<<'<'<<s.l<<','<<s.r<<'>';
+ s.print(o);return o;
}
};
@@ -20,10 +25,15 @@ struct NTSpan {
WordID nt; // awkward: this is a positive index, used in TD. but represented as negative in mixed terminal/NT space in rules/hgs.
NTSpan() : nt(0) { }
// prints as possibly empty name (whatever you set of nt,s will show)
+ void print(std::ostream &o,char const* for_span_null="_",char const* for_null="") const {
+ if (nt>0) {
+ o<<TD::Convert(nt);
+ s.print(o,for_span_null);
+ } else
+ s.print(o,for_null);
+ }
friend inline std::ostream &operator<<(std::ostream &o,NTSpan const& t) {
- if (t.nt>0)
- o<<TD::Convert(t.nt);
- return o << t.s;
+ t.print(o);return o;
}
};
diff --git a/utils/named_enum.h b/utils/named_enum.h
index b459b4a9..447dff78 100755
--- a/utils/named_enum.h
+++ b/utils/named_enum.h
@@ -74,9 +74,9 @@ inline void throw_enum_error(std::string const& enumtype,std::string const& msg)
/// declare the access function and define enum values
#define DECLARE_NAMED_ENUM_T(DEF,EnumType) \
- typedef enum { \
+ enum EnumType { \
DEF(NAMED_ENUM_VALUE,EnumType) \
- } EnumType; \
+ }; \
const char *GetName(EnumType dummy); \
EnumType Get ## EnumType (const char *string); \
inline EnumType Get ## EnumType (std::string const& s) { return Get ## EnumType (s.c_str()); } \