forked from apertium/apertium-lex-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlrx_compiler.h
120 lines (94 loc) · 2.92 KB
/
lrx_compiler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
* Copyright (C) 2011--2012 Universitat d'Alacant
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __LRX_COMPILER_H__
#define __LRX_COMPILER_H__
#include <cwchar>
#include <cstdio>
#include <libgen.h>
#include <cerrno>
#include <string>
#include <iostream>
#include <limits>
#include <sstream>
#include <cstdlib>
#include <list>
#include <set>
#include <libxml/xmlreader.h>
#include <lttoolbox/ltstr.h>
#include <lttoolbox/lt_locale.h>
#include <lttoolbox/transducer.h>
#include <lttoolbox/xml_parse_util.h>
#include <lttoolbox/alphabet.h>
#include <lttoolbox/compression.h>
#include <lttoolbox/regexp_compiler.h>
#include <lttoolbox/state.h>
#include <lttoolbox/trans_exe.h>
#include <lttoolbox/my_stdio.h>
using namespace std;
class LRXCompiler
{
private:
xmlTextReaderPtr reader;
Alphabet alphabet;
Transducer transducer;
map<wstring, Transducer> recognisers; // keyed on pattern
map<int, double> weights; // keyed on rule id
int initialState;
int lastState;
int currentState;
int currentRuleId;
bool debugMode;
bool outputGraph;
bool allBlanks();
void skipBlanks(wstring &name);
void procNode();
void procList();
void procListMatch();
void procRule();
void procOr();
void procMatch();
void procSelect();
void procRemove();
wstring attrib(wstring const &name);
wstring itow(int i);
int wtoi(wstring);
double wtod(wstring);
public:
static wstring const LRX_COMPILER_RULES_ELEM;
static wstring const LRX_COMPILER_RULE_ELEM;
static wstring const LRX_COMPILER_MATCH_ELEM;
static wstring const LRX_COMPILER_SELECT_ELEM;
static wstring const LRX_COMPILER_REMOVE_ELEM;
static wstring const LRX_COMPILER_OR_ELEM;
static wstring const LRX_COMPILER_SURFACE_ATTR;
static wstring const LRX_COMPILER_LEMMA_ATTR;
static wstring const LRX_COMPILER_TAGS_ATTR;
static wstring const LRX_COMPILER_COMMENT_ATTR;
static wstring const LRX_COMPILER_NAME_ATTR;
static wstring const LRX_COMPILER_WEIGHT_ATTR;
static wstring const LRX_COMPILER_TYPE_SELECT;
static wstring const LRX_COMPILER_TYPE_REMOVE;
static wstring const LRX_COMPILER_TYPE_SKIP;
static double const LRX_COMPILER_DEFAULT_WEIGHT;
LRXCompiler();
~LRXCompiler();
void parse(string const &fitxer);
void write(FILE *fd);
void setOutputGraph(bool o);
void setDebugMode(bool o);
};
#endif /* __LRX_COMPILER_H__ */