bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
463 lines
11 KiB
Python
463 lines
11 KiB
Python
"""
|
|
BlackRoad OS Language - AST Node Definitions
|
|
Abstract Syntax Tree node classes for representing program structure
|
|
"""
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Optional, Union, Any
|
|
from enum import Enum
|
|
|
|
# ============================================================================
|
|
# Base Node Classes
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class ASTNode:
|
|
"""Base class for all AST nodes"""
|
|
line: int = field(default=0, kw_only=True)
|
|
column: int = field(default=0, kw_only=True)
|
|
|
|
# ============================================================================
|
|
# Type Nodes
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class TypeNode(ASTNode):
|
|
"""Base class for type annotations"""
|
|
pass
|
|
|
|
@dataclass
|
|
class PrimitiveType(TypeNode):
|
|
"""Primitive types: int, float, string, bool, etc."""
|
|
name: str
|
|
|
|
@dataclass
|
|
class VectorType(TypeNode):
|
|
"""Vector types: vec2, vec3, vec4"""
|
|
dimension: int # 2, 3, or 4
|
|
|
|
@dataclass
|
|
class ListType(TypeNode):
|
|
"""List type: list[T]"""
|
|
element_type: TypeNode
|
|
|
|
@dataclass
|
|
class DictType(TypeNode):
|
|
"""Dictionary type: dict[K, V]"""
|
|
key_type: TypeNode
|
|
value_type: TypeNode
|
|
|
|
@dataclass
|
|
class SetType(TypeNode):
|
|
"""Set type: set[T]"""
|
|
element_type: TypeNode
|
|
|
|
@dataclass
|
|
class TupleType(TypeNode):
|
|
"""Tuple type: (T1, T2, ...)"""
|
|
element_types: List[TypeNode]
|
|
|
|
@dataclass
|
|
class FunctionType(TypeNode):
|
|
"""Function type: (Args...) -> Return"""
|
|
param_types: List[TypeNode]
|
|
return_type: TypeNode
|
|
|
|
@dataclass
|
|
class CustomType(TypeNode):
|
|
"""User-defined type"""
|
|
name: str
|
|
|
|
# ============================================================================
|
|
# Expression Nodes
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class Expression(ASTNode):
|
|
"""Base class for expressions"""
|
|
pass
|
|
|
|
@dataclass
|
|
class IntegerLiteral(Expression):
|
|
"""Integer literal: 42"""
|
|
value: int
|
|
|
|
@dataclass
|
|
class FloatLiteral(Expression):
|
|
"""Float literal: 3.14"""
|
|
value: float
|
|
|
|
@dataclass
|
|
class StringLiteral(Expression):
|
|
"""String literal: "hello" """
|
|
value: str
|
|
|
|
@dataclass
|
|
class BooleanLiteral(Expression):
|
|
"""Boolean literal: true/false"""
|
|
value: bool
|
|
|
|
@dataclass
|
|
class ColorLiteral(Expression):
|
|
"""Color literal: #FF1D6C"""
|
|
value: str
|
|
|
|
@dataclass
|
|
class VectorLiteral(Expression):
|
|
"""Vector literal: vec3(1, 2, 3)"""
|
|
dimension: int
|
|
components: List[Expression]
|
|
|
|
@dataclass
|
|
class ListLiteral(Expression):
|
|
"""List literal: [1, 2, 3]"""
|
|
elements: List[Expression]
|
|
|
|
@dataclass
|
|
class DictLiteral(Expression):
|
|
"""Dictionary literal: {key: value}"""
|
|
pairs: List[tuple[Expression, Expression]]
|
|
|
|
@dataclass
|
|
class SetLiteral(Expression):
|
|
"""Set literal: {1, 2, 3}"""
|
|
elements: List[Expression]
|
|
|
|
@dataclass
|
|
class TupleLiteral(Expression):
|
|
"""Tuple literal: (1, 2, 3)"""
|
|
elements: List[Expression]
|
|
|
|
@dataclass
|
|
class Identifier(Expression):
|
|
"""Variable reference: x"""
|
|
name: str
|
|
|
|
@dataclass
|
|
class BinaryOp(Expression):
|
|
"""Binary operation: a + b"""
|
|
left: Expression
|
|
operator: str
|
|
right: Expression
|
|
|
|
@dataclass
|
|
class UnaryOp(Expression):
|
|
"""Unary operation: -x, not y"""
|
|
operator: str
|
|
operand: Expression
|
|
|
|
@dataclass
|
|
class FunctionCall(Expression):
|
|
"""Function call: foo(a, b, c)"""
|
|
function: Expression
|
|
arguments: List[Expression]
|
|
|
|
@dataclass
|
|
class MemberAccess(Expression):
|
|
"""Member access: obj.field"""
|
|
object: Expression
|
|
member: str
|
|
|
|
@dataclass
|
|
class IndexAccess(Expression):
|
|
"""Index access: arr[i]"""
|
|
object: Expression
|
|
index: Expression
|
|
|
|
@dataclass
|
|
class LambdaExpression(Expression):
|
|
"""Lambda: (x, y) -> x + y"""
|
|
parameters: List['Parameter']
|
|
body: Expression
|
|
|
|
@dataclass
|
|
class RangeExpression(Expression):
|
|
"""Range: 0..10"""
|
|
start: Expression
|
|
end: Expression
|
|
|
|
@dataclass
|
|
class MatchExpression(Expression):
|
|
"""Match expression: match x: ..."""
|
|
value: Expression
|
|
cases: List['MatchCase']
|
|
|
|
# ============================================================================
|
|
# Statement Nodes
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class Statement(ASTNode):
|
|
"""Base class for statements"""
|
|
pass
|
|
|
|
@dataclass
|
|
class VariableDeclaration(Statement):
|
|
"""Variable declaration: let x: int = 42"""
|
|
name: str
|
|
type_annotation: Optional[TypeNode]
|
|
initializer: Optional[Expression]
|
|
is_mutable: bool # var vs let
|
|
is_const: bool # const
|
|
|
|
@dataclass
|
|
class Assignment(Statement):
|
|
"""Assignment: x = 42"""
|
|
target: Expression # Can be Identifier, MemberAccess, or IndexAccess
|
|
value: Expression
|
|
|
|
@dataclass
|
|
class CompoundAssignment(Statement):
|
|
"""Compound assignment: x += 1"""
|
|
target: Expression
|
|
operator: str # +=, -=, *=, /=
|
|
value: Expression
|
|
|
|
@dataclass
|
|
class ExpressionStatement(Statement):
|
|
"""Expression as statement"""
|
|
expression: Expression
|
|
|
|
@dataclass
|
|
class ReturnStatement(Statement):
|
|
"""Return statement: return x"""
|
|
value: Optional[Expression]
|
|
|
|
@dataclass
|
|
class BreakStatement(Statement):
|
|
"""Break statement"""
|
|
pass
|
|
|
|
@dataclass
|
|
class ContinueStatement(Statement):
|
|
"""Continue statement"""
|
|
pass
|
|
|
|
@dataclass
|
|
class IfStatement(Statement):
|
|
"""If statement: if cond: ..."""
|
|
condition: Expression
|
|
then_block: List[Statement]
|
|
elif_blocks: List[tuple[Expression, List[Statement]]]
|
|
else_block: Optional[List[Statement]]
|
|
|
|
@dataclass
|
|
class MatchStatement(Statement):
|
|
"""Match statement: match x: ..."""
|
|
value: Expression
|
|
cases: List['MatchCase']
|
|
|
|
@dataclass
|
|
class MatchCase(ASTNode):
|
|
"""Match case: pattern -> body"""
|
|
pattern: 'Pattern'
|
|
body: List[Statement]
|
|
|
|
@dataclass
|
|
class Pattern(ASTNode):
|
|
"""Pattern for match statement"""
|
|
pass
|
|
|
|
@dataclass
|
|
class LiteralPattern(Pattern):
|
|
"""Literal pattern: 42, "hello" """
|
|
value: Expression
|
|
|
|
@dataclass
|
|
class RangePattern(Pattern):
|
|
"""Range pattern: 1..10"""
|
|
start: Expression
|
|
end: Expression
|
|
|
|
@dataclass
|
|
class WildcardPattern(Pattern):
|
|
"""Wildcard pattern: _"""
|
|
pass
|
|
|
|
@dataclass
|
|
class IdentifierPattern(Pattern):
|
|
"""Identifier pattern: x (binds value to x)"""
|
|
name: str
|
|
|
|
@dataclass
|
|
class ConstructorPattern(Pattern):
|
|
"""Constructor pattern: Status.Active(id)"""
|
|
type_name: str
|
|
variant: str
|
|
fields: List[Pattern]
|
|
|
|
@dataclass
|
|
class ForLoop(Statement):
|
|
"""For loop: for x in items: ..."""
|
|
variable: str
|
|
iterable: Expression
|
|
body: List[Statement]
|
|
|
|
@dataclass
|
|
class WhileLoop(Statement):
|
|
"""While loop: while cond: ..."""
|
|
condition: Expression
|
|
body: List[Statement]
|
|
|
|
# ============================================================================
|
|
# Function & Type Definitions
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class Parameter(ASTNode):
|
|
"""Function parameter"""
|
|
name: str
|
|
type_annotation: Optional[TypeNode]
|
|
default_value: Optional[Expression]
|
|
is_variadic: bool # ...args
|
|
|
|
@dataclass
|
|
class FunctionDefinition(Statement):
|
|
"""Function definition: fun foo(x: int) -> int: ..."""
|
|
name: str
|
|
parameters: List[Parameter]
|
|
return_type: Optional[TypeNode]
|
|
body: List[Statement]
|
|
is_async: bool
|
|
is_exported: bool
|
|
|
|
@dataclass
|
|
class TypeDefinition(Statement):
|
|
"""Type definition: type User: ..."""
|
|
name: str
|
|
fields: List['TypeField']
|
|
is_exported: bool
|
|
|
|
@dataclass
|
|
class TypeField(ASTNode):
|
|
"""Field in type definition"""
|
|
name: str
|
|
type_annotation: TypeNode
|
|
default_value: Optional[Expression]
|
|
|
|
@dataclass
|
|
class EnumVariant(ASTNode):
|
|
"""Variant in enum definition"""
|
|
name: str
|
|
fields: Optional[List[TypeField]]
|
|
|
|
# ============================================================================
|
|
# 3D/Spatial Nodes
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class SpaceDefinition(Statement):
|
|
"""3D space definition: space MyScene: ..."""
|
|
name: str
|
|
objects: List['Object3D']
|
|
|
|
@dataclass
|
|
class Object3D(ASTNode):
|
|
"""Base class for 3D objects"""
|
|
name: str
|
|
properties: List['Property3D']
|
|
|
|
@dataclass
|
|
class CubeObject(Object3D):
|
|
"""Cube object"""
|
|
pass
|
|
|
|
@dataclass
|
|
class SphereObject(Object3D):
|
|
"""Sphere object"""
|
|
pass
|
|
|
|
@dataclass
|
|
class PlaneObject(Object3D):
|
|
"""Plane object"""
|
|
pass
|
|
|
|
@dataclass
|
|
class LightObject(Object3D):
|
|
"""Light object"""
|
|
pass
|
|
|
|
@dataclass
|
|
class CameraObject(Object3D):
|
|
"""Camera object"""
|
|
pass
|
|
|
|
@dataclass
|
|
class Property3D(ASTNode):
|
|
"""Property of 3D object"""
|
|
name: str
|
|
value: Expression
|
|
|
|
# ============================================================================
|
|
# Module System
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class ModuleDeclaration(Statement):
|
|
"""Module declaration: module math"""
|
|
name: str
|
|
|
|
@dataclass
|
|
class ImportStatement(Statement):
|
|
"""Import statement: import math"""
|
|
module_path: str
|
|
alias: Optional[str]
|
|
items: Optional[List[str]] # For 'from x import y, z'
|
|
|
|
@dataclass
|
|
class ExportStatement(Statement):
|
|
"""Export statement: export fun foo(): ..."""
|
|
statement: Statement
|
|
|
|
# ============================================================================
|
|
# Concurrency
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class SpawnStatement(Statement):
|
|
"""Spawn concurrent task: spawn: ..."""
|
|
body: List[Statement]
|
|
|
|
@dataclass
|
|
class AwaitExpression(Expression):
|
|
"""Await expression: await foo()"""
|
|
expression: Expression
|
|
|
|
@dataclass
|
|
class SelectStatement(Statement):
|
|
"""Select statement: select: case ..."""
|
|
cases: List['SelectCase']
|
|
|
|
@dataclass
|
|
class SelectCase(ASTNode):
|
|
"""Select case: case x = <-ch: ..."""
|
|
variable: Optional[str]
|
|
channel: Expression
|
|
body: List[Statement]
|
|
|
|
# ============================================================================
|
|
# Program Root
|
|
# ============================================================================
|
|
|
|
@dataclass
|
|
class Program(ASTNode):
|
|
"""Root program node"""
|
|
statements: List[Statement]
|
|
|
|
# ============================================================================
|
|
# Visitor Pattern (for AST traversal)
|
|
# ============================================================================
|
|
|
|
class ASTVisitor:
|
|
"""Base class for AST visitors"""
|
|
|
|
def visit(self, node: ASTNode):
|
|
"""Visit a node"""
|
|
method_name = f'visit_{node.__class__.__name__}'
|
|
visitor = getattr(self, method_name, self.generic_visit)
|
|
return visitor(node)
|
|
|
|
def generic_visit(self, node: ASTNode):
|
|
"""Generic visit method"""
|
|
raise Exception(f'No visit_{node.__class__.__name__} method')
|