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
|
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
|
-
+
+
-
-
+
+
+
+
+
-
+
+
-
+
+
|
#ifndef EMPATHY_SEMA_UNI_RULESET_H
#define EMPATHY_SEMA_UNI_RULESET_H
namespace empathy::sema
{
class UnificationContext;
class UnificationRuleSet
{
public:
using Func = function< UniGen ( const Term& lhs, const Term& rhs, UnificationContext& ) >;
using UniFunc = function< UniGen ( const Term& lhs, const Term& rhs, UnificationContext& ) >;
using HalfUniFunc = function< UniGen ( const Term& lhs, UnificationContext& ) >;
UnificationRuleSet();
void addRule( const Term& pat, Func f );
void addRule( const Term& pat1, const Term& pat2, Func f );
void addRule( const Term& pat, UniFunc f );
void addRule( const Term& pat1, const Term& pat2, UniFunc f );
void addRule( const Term& pat, HalfUniFunc f );
const auto& trie() const { return m_trie; }
const auto& UniRules() const { return m_uniRules; }
const auto& HalfUniRules() const { return m_halfUniRules; }
private:
Trie< Func > m_trie;
Trie< UniFunc > m_uniRules;
Trie< HalfUniFunc > m_halfUniRules;
};
}
#endif
|