forked from sanya28wd/Python-Compiler-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtokens.py
More file actions
84 lines (68 loc) · 1.88 KB
/
tokens.py
File metadata and controls
84 lines (68 loc) · 1.88 KB
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
"""
Token class to represent lexical tokens in the compiler
"""
class TokenType:
# Token definations
# Keywords
KEYWORD_INT = "KEYWORD_INT"
KEYWORD_FLOAT = "KEYWORD_FLOAT"
KEYWORD_IF = "KEYWORD_IF"
KEYWORD_ELSE = "KEYWORD_ELSE"
KEYWORD_WHILE = "KEYWORD_WHILE"
KEYWORD_PRINT = "KEYWORD_PRINT"
# Identifiers and Literals
IDENTIFIER = "IDENTIFIER"
INTEGER = "INTEGER"
FLOAT = "FLOAT"
# Arithmetic Operators
PLUS = "PLUS"
MINUS = "MINUS"
MULTIPLY = "MULTIPLY"
DIVIDE = "DIVIDE"
MODULO = "MODULO"
# Assignment
ASSIGN = "ASSIGN"
# Relational Operators
LT = "LT"
GT = "GT"
LE = "LE"
GE = "GE"
EQ = "EQ"
NE = "NE"
# Boolean Operators
AND = "AND"
OR = "OR"
NOT = "NOT"
# Delimiters
LPAREN = "LPAREN"
RPAREN = "RPAREN"
LBRACE = "LBRACE"
RBRACE = "RBRACE"
SEMICOLON = "SEMICOLON"
COMMA = "COMMA"
# Special
EOF = "EOF"
NEWLINE = "NEWLINE"
# Error
UNKNOWN = "UNKNOWN"
class Token:
# Represents a lexical token
def __init__(self, token_type, value, line, column):
"""
Initialize a token.
Args:
token_type: Type of the token (from TokenType)
value: The actual value/lexeme
line: Line number where token appears
column: Column number where token appears
"""
self.type = token_type
self.value = value
self.line = line
self.column = column
def __str__(self):
# String representation of the token
return f"Token({self.type}, '{self.value}', Line {self.line}, Col {self.column})"
def __repr__(self):
# Representation of the token
return self.__str__()