opencode-pine2pyne 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opencode_pine2pyne-0.1.0.dist-info/METADATA +123 -0
- opencode_pine2pyne-0.1.0.dist-info/RECORD +23 -0
- opencode_pine2pyne-0.1.0.dist-info/WHEEL +5 -0
- opencode_pine2pyne-0.1.0.dist-info/entry_points.txt +2 -0
- opencode_pine2pyne-0.1.0.dist-info/licenses/LICENSE +201 -0
- opencode_pine2pyne-0.1.0.dist-info/top_level.txt +1 -0
- pine2pyne/README.md +178 -0
- pine2pyne/TRANSPILER_BEST_PRACTICES.md +425 -0
- pine2pyne/TRANSPILER_USAGE.md +264 -0
- pine2pyne/__init__.py +86 -0
- pine2pyne/__main__.py +12 -0
- pine2pyne/ast_nodes.py +352 -0
- pine2pyne/cli.py +212 -0
- pine2pyne/codegen.py +836 -0
- pine2pyne/errors.py +48 -0
- pine2pyne/import_resolver.py +407 -0
- pine2pyne/lexer.py +546 -0
- pine2pyne/parser.py +1510 -0
- pine2pyne/pine_builtins.py +464 -0
- pine2pyne/symbol_table.py +156 -0
- pine2pyne/tokens.py +143 -0
- pine2pyne/transformer.py +2327 -0
- pine2pyne/type_inference.py +328 -0
pine2pyne/tokens.py
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Token type definitions for Pine Script v6 lexer.
|
|
3
|
+
"""
|
|
4
|
+
from enum import Enum, auto
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, Optional
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class TokenType(Enum):
|
|
10
|
+
"""All token types supported by the Pine Script v6 lexer."""
|
|
11
|
+
|
|
12
|
+
# Literals
|
|
13
|
+
INT_LITERAL = auto()
|
|
14
|
+
FLOAT_LITERAL = auto()
|
|
15
|
+
STRING_LITERAL = auto()
|
|
16
|
+
BOOL_LITERAL = auto()
|
|
17
|
+
COLOR_LITERAL = auto()
|
|
18
|
+
NA_LITERAL = auto()
|
|
19
|
+
|
|
20
|
+
# Identifiers and types
|
|
21
|
+
IDENTIFIER = auto()
|
|
22
|
+
TYPE_IDENTIFIER = auto()
|
|
23
|
+
|
|
24
|
+
# Keywords
|
|
25
|
+
VAR = auto()
|
|
26
|
+
VARIP = auto()
|
|
27
|
+
IF = auto()
|
|
28
|
+
ELSE = auto()
|
|
29
|
+
FOR = auto()
|
|
30
|
+
TO = auto()
|
|
31
|
+
BY = auto()
|
|
32
|
+
IN = auto()
|
|
33
|
+
WHILE = auto()
|
|
34
|
+
SWITCH = auto()
|
|
35
|
+
BREAK = auto()
|
|
36
|
+
CONTINUE = auto()
|
|
37
|
+
IMPORT = auto()
|
|
38
|
+
EXPORT = auto()
|
|
39
|
+
METHOD = auto()
|
|
40
|
+
TYPE = auto()
|
|
41
|
+
ENUM = auto()
|
|
42
|
+
NOT = auto()
|
|
43
|
+
AND = auto()
|
|
44
|
+
OR = auto()
|
|
45
|
+
FUNCTION = auto()
|
|
46
|
+
TRUE = auto()
|
|
47
|
+
FALSE = auto()
|
|
48
|
+
|
|
49
|
+
# Operators
|
|
50
|
+
ASSIGN = auto() # =
|
|
51
|
+
REASSIGN = auto() # :=
|
|
52
|
+
PLUS_ASSIGN = auto() # +=
|
|
53
|
+
MINUS_ASSIGN = auto() # -=
|
|
54
|
+
MULT_ASSIGN = auto() # *=
|
|
55
|
+
DIV_ASSIGN = auto() # /=
|
|
56
|
+
MOD_ASSIGN = auto() # %=
|
|
57
|
+
PLUS = auto() # +
|
|
58
|
+
MINUS = auto() # -
|
|
59
|
+
MULT = auto() # *
|
|
60
|
+
DIV = auto() # /
|
|
61
|
+
MOD = auto() # %
|
|
62
|
+
GT = auto() # >
|
|
63
|
+
LT = auto() # <
|
|
64
|
+
GTE = auto() # >=
|
|
65
|
+
LTE = auto() # <=
|
|
66
|
+
EQ = auto() # ==
|
|
67
|
+
NEQ = auto() # !=
|
|
68
|
+
ARROW = auto() # =>
|
|
69
|
+
TERNARY = auto() # ?
|
|
70
|
+
COLON = auto() # :
|
|
71
|
+
DOT = auto() # .
|
|
72
|
+
|
|
73
|
+
# Delimiters
|
|
74
|
+
LPAREN = auto() # (
|
|
75
|
+
RPAREN = auto() # )
|
|
76
|
+
LBRACKET = auto() # [
|
|
77
|
+
RBRACKET = auto() # ]
|
|
78
|
+
COMMA = auto() # ,
|
|
79
|
+
NEWLINE = auto() # \n
|
|
80
|
+
INDENT = auto() # Increase indentation
|
|
81
|
+
DEDENT = auto() # Decrease indentation
|
|
82
|
+
EOF = auto() # End of file
|
|
83
|
+
|
|
84
|
+
# Special
|
|
85
|
+
COMMENT = auto() # // comment
|
|
86
|
+
VERSION_ANNOTATION = auto() # //@version=6
|
|
87
|
+
COMPILER_ANNOTATION = auto() # //@description, //@function, etc.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
# Keywords mapping
|
|
91
|
+
KEYWORDS = {
|
|
92
|
+
'var': TokenType.VAR,
|
|
93
|
+
'varip': TokenType.VARIP,
|
|
94
|
+
'if': TokenType.IF,
|
|
95
|
+
'else': TokenType.ELSE,
|
|
96
|
+
'for': TokenType.FOR,
|
|
97
|
+
'to': TokenType.TO,
|
|
98
|
+
'by': TokenType.BY,
|
|
99
|
+
'in': TokenType.IN,
|
|
100
|
+
'while': TokenType.WHILE,
|
|
101
|
+
'switch': TokenType.SWITCH,
|
|
102
|
+
'break': TokenType.BREAK,
|
|
103
|
+
'continue': TokenType.CONTINUE,
|
|
104
|
+
'import': TokenType.IMPORT,
|
|
105
|
+
'export': TokenType.EXPORT,
|
|
106
|
+
'method': TokenType.METHOD,
|
|
107
|
+
'type': TokenType.TYPE,
|
|
108
|
+
'enum': TokenType.ENUM,
|
|
109
|
+
'not': TokenType.NOT,
|
|
110
|
+
'and': TokenType.AND,
|
|
111
|
+
'or': TokenType.OR,
|
|
112
|
+
'function': TokenType.FUNCTION,
|
|
113
|
+
'true': TokenType.TRUE,
|
|
114
|
+
'false': TokenType.FALSE,
|
|
115
|
+
'na': TokenType.NA_LITERAL,
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
# Type identifiers (Pine Script built-in types)
|
|
119
|
+
TYPE_KEYWORDS = {
|
|
120
|
+
'int', 'float', 'bool', 'string', 'color',
|
|
121
|
+
'line', 'label', 'box', 'table', 'linefill', 'polyline',
|
|
122
|
+
'array', 'matrix', 'map',
|
|
123
|
+
'series', 'simple', 'input', 'const',
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@dataclass
|
|
128
|
+
class Token:
|
|
129
|
+
"""Represents a single token from the Pine Script source."""
|
|
130
|
+
type: TokenType
|
|
131
|
+
value: Any
|
|
132
|
+
line: int
|
|
133
|
+
column: int
|
|
134
|
+
lexeme: Optional[str] = None
|
|
135
|
+
is_double_quoted: bool = False # Track if string literal was double-quoted in source
|
|
136
|
+
|
|
137
|
+
def __repr__(self) -> str:
|
|
138
|
+
if self.lexeme:
|
|
139
|
+
return f"Token({self.type.name}, {self.value!r}, {self.line}:{self.column}, {self.lexeme!r})"
|
|
140
|
+
return f"Token({self.type.name}, {self.value!r}, {self.line}:{self.column})"
|
|
141
|
+
|
|
142
|
+
def __str__(self) -> str:
|
|
143
|
+
return self.__repr__()
|