Skip to content

Commit ce78885

Browse files
author
Tanmoy
committed
Official Release v1.0.4.7 - Sanitized and Universal
1 parent 3f87f2b commit ce78885

45 files changed

Lines changed: 5654 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build/lib/techscript/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
"""TechScript — A simple, friendly programming language."""
2+
__version__ = "1.0.4.7"

build/lib/techscript/__main__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"""Allow running TechScript as `python -m techscript`."""
2+
from techscript.cli import main
3+
4+
if __name__ == "__main__":
5+
main()

build/lib/techscript/ast_nodes.py

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
"""TechScript Abstract Syntax Tree node definitions.
2+
3+
Every node is a frozen-ish ``@dataclass``. Statements and expressions are
4+
plain classes — no common base is needed because we pattern-match on type.
5+
"""
6+
7+
from __future__ import annotations
8+
9+
from dataclasses import dataclass, field
10+
from typing import Any
11+
12+
13+
# ===================================================================
14+
# Programme root
15+
# ===================================================================
16+
17+
@dataclass
18+
class Program:
19+
body: list[Any]
20+
21+
22+
@dataclass
23+
class Param:
24+
name: str
25+
default: Any = None
26+
27+
28+
# ===================================================================
29+
# Statements
30+
# ===================================================================
31+
32+
@dataclass
33+
class SayStmt:
34+
"""``say <expr>, …``"""
35+
values: list[Any]
36+
37+
@dataclass
38+
class SetStmt:
39+
"""``set <name> = <expr>``"""
40+
name: str
41+
value: Any
42+
43+
@dataclass
44+
class AssignStmt:
45+
"""``<target> = | += | -= | *= | /= <expr>``"""
46+
target: Any
47+
op: str
48+
value: Any
49+
50+
@dataclass
51+
class ExpressionStmt:
52+
"""A bare expression used as a statement (e.g. function call)."""
53+
expression: Any
54+
55+
@dataclass
56+
class IfStmt:
57+
condition: Any
58+
body: list[Any]
59+
elif_clauses: list[tuple[Any, list[Any]]] = field(default_factory=list)
60+
else_body: list[Any] | None = None
61+
62+
@dataclass
63+
class ForStmt:
64+
var_name: str
65+
iterable: Any
66+
body: list[Any]
67+
68+
@dataclass
69+
class WhileStmt:
70+
condition: Any
71+
body: list[Any]
72+
73+
@dataclass
74+
class FnStmt:
75+
name: str
76+
params: list[Param]
77+
body: list[Any]
78+
79+
@dataclass
80+
class ClassStmt:
81+
name: str
82+
parent: str | None = None
83+
body: list[Any] = field(default_factory=list)
84+
85+
@dataclass
86+
class ReturnStmt:
87+
value: Any = None
88+
89+
@dataclass
90+
class BreakStmt:
91+
pass
92+
93+
@dataclass
94+
class SkipStmt:
95+
pass
96+
97+
@dataclass
98+
class PassStmt:
99+
pass
100+
101+
@dataclass
102+
class TryStmt:
103+
body: list[Any]
104+
catch_var: str | None = None
105+
catch_body: list[Any] = field(default_factory=list)
106+
finally_body: list[Any] | None = None
107+
108+
@dataclass
109+
class ThrowStmt:
110+
value: Any
111+
112+
@dataclass
113+
class MatchStmt:
114+
subject: Any
115+
cases: list[tuple[Any, list[Any]]] = field(default_factory=list)
116+
117+
@dataclass
118+
class ImportStmt:
119+
module: str
120+
names: list[str] | None = None
121+
alias: str | None = None
122+
123+
@dataclass
124+
class FromImportStmt:
125+
module: str
126+
names: list[str]
127+
128+
@dataclass
129+
class DelStmt:
130+
name: str
131+
132+
@dataclass
133+
class DeferStmt:
134+
expression: Any
135+
136+
@dataclass
137+
class GuardStmt:
138+
condition: Any
139+
else_body: list[Any]
140+
141+
@dataclass
142+
class WithStmt:
143+
expression: Any
144+
var_name: str
145+
body: list[Any]
146+
147+
@dataclass
148+
class ConstStmt:
149+
name: str
150+
value: Any
151+
152+
@dataclass
153+
class ExportStmt:
154+
declaration: Any
155+
156+
157+
# ===================================================================
158+
# Expressions
159+
# ===================================================================
160+
161+
@dataclass
162+
class NumberLit:
163+
value: int | float
164+
165+
@dataclass
166+
class StringLit:
167+
value: str
168+
169+
@dataclass
170+
class FStringLit:
171+
"""Stored as raw template string; the interpreter handles ``{…}`` parts."""
172+
raw: str
173+
174+
@dataclass
175+
class BoolLit:
176+
value: bool
177+
178+
@dataclass
179+
class NoneLit:
180+
pass
181+
182+
@dataclass
183+
class ListLit:
184+
elements: list[Any]
185+
186+
@dataclass
187+
class MapLit:
188+
entries: list[tuple[Any, Any]]
189+
190+
@dataclass
191+
class Identifier:
192+
name: str
193+
194+
@dataclass
195+
class BinaryOp:
196+
left: Any
197+
op: str
198+
right: Any
199+
200+
@dataclass
201+
class UnaryOp:
202+
op: str
203+
operand: Any
204+
205+
@dataclass
206+
class CallExpr:
207+
callee: Any
208+
args: list[Any]
209+
210+
@dataclass
211+
class IndexExpr:
212+
obj: Any
213+
index: Any
214+
215+
@dataclass
216+
class MemberExpr:
217+
obj: Any
218+
member: str
219+
220+
@dataclass
221+
class LambdaExpr:
222+
params: list[Param]
223+
body: Any # single expression
224+
225+
@dataclass
226+
class AskExpr:
227+
prompt: Any
228+
229+
@dataclass
230+
class TernaryExpr:
231+
true_val: Any
232+
condition: Any
233+
false_val: Any
234+
235+
@dataclass
236+
class RangeExpr:
237+
start: Any
238+
end: Any
239+
inclusive: bool = False

0 commit comments

Comments
 (0)