-
Notifications
You must be signed in to change notification settings - Fork 0
/
glexer.py
68 lines (62 loc) · 1.81 KB
/
glexer.py
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
from sly import Lexer
class GeckoLexer(Lexer):
tokens = { ID, PLUS, MINUS, TIMES,
DIV, POW, MOD, MATHFUNC, NUMBER,
LPAREN, RPAREN, ASSIGN, THEN, WITH, POLAR, AT, DEGSYM,
CALC, EXIT, NEWLINE, TICK, COMMA, PIPE,
SEMI, VARS, NEW,
INT, FROM, TO, CROCANTE, PLOT, AS, STRING, TITLE }
ignore = ' \t'
ignore_comment = r'/\*.*\*/'
ID = r'[a-zA-Z_][0-9a-zA-Z_]*'
ID['sin'] = MATHFUNC
ID['cos'] = MATHFUNC
ID['tan'] = MATHFUNC
ID['asin'] = MATHFUNC
ID['acos'] = MATHFUNC
ID['atan'] = MATHFUNC
ID['sind'] = MATHFUNC
ID['cosd'] = MATHFUNC
ID['tand'] = MATHFUNC
ID['asind'] = MATHFUNC
ID['acosd'] = MATHFUNC
ID['atand'] = MATHFUNC
ID['rt'] = MATHFUNC
ID['ln'] = MATHFUNC
ID['angle'] = MATHFUNC
ID['abs'] = MATHFUNC
ID['polar'] = POLAR
ID['then'] = THEN
ID['with'] = WITH
ID['calc'] = CALC
ID['gg'] = EXIT
ID['vars'] = VARS
ID['new'] = NEW
ID['int'] = INT
ID['from'] = FROM
ID['to'] = TO
ID['plot'] = PLOT
ID['as'] = AS
NUMBER = r'([0-9]*[.])?[0-9]+(e\-?[1-9][0-9]*)?'
STRING = r'("[^\"]*")'
TITLE = r'\#.*'
PLUS = r'\+'
MINUS = r'-'
TIMES = r'\*'
DIV = r'/'
POW = r'\^'
MOD = r'%'
LPAREN = r'\('
RPAREN = r'\)'
ASSIGN = r'='
NEWLINE = r'\n'
TICK = r"'"
SEMI = r';'
COMMA = r','
PIPE = r'\|'
CROCANTE = r'\$'
AT = r'@'
DEGSYM = r'<'
def error(self, t):
print("Illegal character '%s'" % t.value[0])
self.index += 1