git @ Cat's Eye Technologies Samovar / b534de1
Map Greek letters to their ASCII equivalents. Chris Pressey 6 years ago
4 changed file(s) with 37 addition(s) and 7 deletion(s). Raw diff Collapse all Expand all
7474 * Output scenarios to JSON.
7575 * Python 3 support.
7676 * Allow comments in source file. Probably `#` or `//`.
77 * Say that Greek letter variables are exactly equivalent to `?rho`, etc.
78 * `!` for not.
7977 * Consider a simple equality rule.
8078 * Consider allowing `∨`.
8179 * Take AST code from SixtyPical or ALPACA (or try to do better, perhaps with
1414 self.unifier = unifier
1515
1616 def to_json(self):
17 u = dict([(str(k), str(v)) for k, v in self.unifier.items()])
17 u = dict([(unicode(k), unicode(v)) for k, v in self.unifier.items()])
1818 return [self.rule.to_json(), u]
1919
2020 def __str__(self):
8585 return Cond(exprs=exprs)
8686
8787 def expr(self):
88 if self.scanner.consume('~', u'¬'):
88 if self.scanner.consume('~', u'¬', '!'):
8989 return Retract(term=self.term())
9090 else:
9191 return Assert(term=self.term())
9292
9393 def term(self):
94 if self.scanner.on_type('variable') or self.scanner.on_type('qmark'):
94 if self.scanner.on_type('variable'):
9595 return self.var()
9696 self.scanner.check_type('word', 'punct')
9797 constructor = self.scanner.token
105105 return Term(constructor, *subterms)
106106
107107 def var(self):
108 #self.scanner.check_type('variable')
108 self.scanner.check_type('variable')
109109 name = self.scanner.token
110110 self.scanner.scan()
111111 v = Var(name)
00 # encoding: UTF-8
11
22 import re
3
4
5 GREEK = [
6 (u'?alpha', u'α'),
7 (u'?beta', u'β'),
8 (u'?gamma', u'γ'),
9 (u'?delta', u'δ'),
10 (u'?epsilon', u'ε'),
11 (u'?zeta', u'ζ'),
12 (u'?theta', u'θ'),
13 (u'?iota', u'ι'),
14 (u'?kappa', u'κ'),
15 (u'?lambda', u'λ'),
16 (u'?mu', u'μ'),
17 (u'?nu', u'ν'),
18 (u'?xi', u'ξ'),
19 (u'?omicron', u'ο'),
20 (u'?pi', u'π'),
21 (u'?rho', u'ρ'),
22 (u'?sigma', u'σ'),
23 (u'?tau', u'τ'),
24 (u'?upsilon', u'υ'),
25 (u'?phi', u'φ'),
26 (u'?chi', u'χ'),
27 (u'?psi', u'ψ'),
28 (u'?omega', u'ω'),
29 ]
330
431
532 class Scanner(object):
3663 if self.scan_pattern(ur'\~|→|=|¬|∧|∨', 'operator'):
3764 return
3865 # TODO: not sure about the ? overloading (here and in punct). should be okay though?
39 if self.scan_pattern(r'\?[a-zA-Z_]+', 'qmark'):
66 if self.scan_pattern(r'\?[a-zA-Z_]+', 'variable'):
4067 return
4168 if self.scan_pattern(r'\,|\.|\?|\!|\"' + r"|\'", 'punct'):
4269 return
4572 if self.scan_pattern(r'[a-zA-Z_]+', 'word'):
4673 return
4774 if self.scan_pattern(ur'[αβγδεζθικλμνξοπρστυφχψω]', 'variable'):
75 for varname, letter in GREEK:
76 if letter == self.token:
77 self.token = varname
78 break
79 assert self.token.startswith('?'), repr(self.token)
4880 return
4981 if self.scan_pattern(r'.', 'unknown character'):
5082 return