Skip to content

symbol_table

Classes:

SymbolTable

SymbolTable()

Methods:

Source code in packages/astx/src/astx/symbol_table.py
202
203
def __init__(self) -> None:
    self.scopes = Scope()

define

define(expr: NamedExpr) -> None
Source code in packages/astx/src/astx/symbol_table.py
205
206
207
208
209
210
211
212
213
214
def define(self, expr: NamedExpr) -> None:
    """
    title: Define a new named expression inside the scoped stack.
    parameters:
      expr:
        type: NamedExpr
    """
    if not self.scopes.current:
        raise Exception("SymbolTable: No scope active.")
    self.scopes.current.named_expr[expr.name] = expr

lookup

lookup(name: str) -> NamedExpr
Source code in packages/astx/src/astx/symbol_table.py
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
def lookup(self, name: str) -> NamedExpr:
    """
    title: Get a named expression from the scope stack.
    parameters:
      name:
        type: str
    returns:
      type: NamedExpr
    """
    scope = self.scopes.current
    while scope is not None:
        if name in scope.named_expr:
            return scope.named_expr[name]
        scope = scope.parent
    raise NameError(f"Name '{name}' is not defined")

update

update(expr: NamedExpr) -> None

It is useful mainly for updating the comment of the expression. parameters: expr: type: NamedExpr

Source code in packages/astx/src/astx/symbol_table.py
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
def update(self, expr: NamedExpr) -> None:
    """
    title: Update the expression on the SymbolTable.
    summary: |-

      It is useful mainly for updating the comment of the expression.
    parameters:
      expr:
        type: NamedExpr
    """
    if not self.scopes.current:
        raise Exception("SymbolTable: No scope active.")
    if expr.name not in self.scopes.current.named_expr:
        raise Exception("This name doesn't exist in the SymbolTable.")
    self.scopes.current.named_expr[expr.name] = expr