Update to ply 2.3
[gem5.git] / ext / ply / example / BASIC / basiclex.py
1 # An implementation of Dartmouth BASIC (1964)
2
3 from ply import *
4
5 keywords = (
6 'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP',
7 'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW',
8 )
9
10 tokens = keywords + (
11 'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER',
12 'LPAREN','RPAREN','LT','LE','GT','GE','NE',
13 'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING',
14 'ID','NEWLINE'
15 )
16
17 t_ignore = ' \t'
18
19 def t_REM(t):
20 r'REM .*'
21 return t
22
23 def t_ID(t):
24 r'[A-Z][A-Z0-9]*'
25 if t.value in keywords:
26 t.type = t.value
27 return t
28
29 t_EQUALS = r'='
30 t_PLUS = r'\+'
31 t_MINUS = r'-'
32 t_TIMES = r'\*'
33 t_POWER = r'\^'
34 t_DIVIDE = r'/'
35 t_LPAREN = r'\('
36 t_RPAREN = r'\)'
37 t_LT = r'<'
38 t_LE = r'<='
39 t_GT = r'>'
40 t_GE = r'>='
41 t_NE = r'<>'
42 t_COMMA = r'\,'
43 t_SEMI = r';'
44 t_INTEGER = r'\d+'
45 t_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))'
46 t_STRING = r'\".*?\"'
47
48 def t_NEWLINE(t):
49 r'\n'
50 t.lexer.lineno += 1
51 return t
52
53 def t_error(t):
54 print "Illegal character", t.value[0]
55 t.lexer.skip(1)
56
57 lex.lex()
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74