Deprecated angel3_symbol_table
This commit is contained in:
parent
242a70b7c9
commit
ae0b40079c
3 changed files with 38 additions and 12 deletions
|
@ -1,23 +1,35 @@
|
||||||
# 2.0.2
|
# Change Log
|
||||||
|
|
||||||
|
## 2.0.3
|
||||||
|
|
||||||
|
* Final release. Replaced by `belatuk_symbol_table` package.
|
||||||
|
|
||||||
|
## 2.0.2
|
||||||
|
|
||||||
* Resolved static analysis warnings
|
* Resolved static analysis warnings
|
||||||
|
|
||||||
# 2.0.1
|
## 2.0.1
|
||||||
|
|
||||||
* Resolved static analysis warnings
|
* Resolved static analysis warnings
|
||||||
|
|
||||||
# 2.0.0
|
## 2.0.0
|
||||||
|
|
||||||
* Migrated to work with Dart SDK 2.12.x NNBD
|
* Migrated to work with Dart SDK 2.12.x NNBD
|
||||||
|
|
||||||
## 1.0.4
|
#### 1.0.4
|
||||||
|
|
||||||
* Added `context` to `SymbolTable`.
|
* Added `context` to `SymbolTable`.
|
||||||
|
|
||||||
## 1.0.3
|
#### 1.0.3
|
||||||
|
|
||||||
* Converted `Visibility` into a `Comparable` class.
|
* Converted `Visibility` into a `Comparable` class.
|
||||||
* Renamed `add` -> `create`, `put` -> `assign`, and `allVariablesOfVisibility` -> `allVariablesWithVisibility`.
|
* Renamed `add` -> `create`, `put` -> `assign`, and `allVariablesOfVisibility` -> `allVariablesWithVisibility`.
|
||||||
* Added tests for `Visibility` comparing, and `depth`.
|
* Added tests for `Visibility` comparing, and `depth`.
|
||||||
* Added `uniqueName()` to `SymbolTable`.
|
* Added `uniqueName()` to `SymbolTable`.
|
||||||
* Fixed a typo in `remove` that would have prevented it from working correctly.
|
* Fixed a typo in `remove` that would have prevented it from working correctly.
|
||||||
|
|
||||||
## 1.0.2
|
#### 1.0.2
|
||||||
|
|
||||||
* Added `depth` to `SymbolTable`.
|
* Added `depth` to `SymbolTable`.
|
||||||
* Added `symbolTable` to `Variable`.
|
* Added `symbolTable` to `Variable`.
|
||||||
* Deprecated the redundant `Constant` class.
|
* Deprecated the redundant `Constant` class.
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
# angel3_symbol_table
|
# Angel3 Symbol Table
|
||||||
[![version](https://img.shields.io/badge/pub-v2.0.2-brightgreen)](https://pub.dartlang.org/packages/angel3_symbol_table)
|
|
||||||
|
[![version](https://img.shields.io/badge/pub-v2.0.3-brightgreen)](https://pub.dartlang.org/packages/angel3_symbol_table)
|
||||||
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)
|
[![Null Safety](https://img.shields.io/badge/null-safety-brightgreen)](https://dart.dev/null-safety)
|
||||||
[![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion)
|
[![Gitter](https://img.shields.io/gitter/room/angel_dart/discussion)](https://gitter.im/angel_dart/discussion)
|
||||||
|
|
||||||
[![License](https://img.shields.io/github/license/dukefirehawk/angel)](https://github.com/dukefirehawk/angel/tree/angel3/packages/symbol_table/LICENSE)
|
[![License](https://img.shields.io/github/license/dukefirehawk/angel)](https://github.com/dukefirehawk/angel/tree/angel3/packages/symbol_table/LICENSE)
|
||||||
|
|
||||||
|
**DEPRECATED: Replaced by [`belatuk_symbol_table`](https://pub.dartlang.org/packages/belatuk_symbol_table) package**
|
||||||
|
|
||||||
A generic symbol table implementation in Dart, with support for scopes and constants.
|
A generic symbol table implementation in Dart, with support for scopes and constants.
|
||||||
The symbol tables produced by this package are hierarchical (in this case, tree-shaped),
|
The symbol tables produced by this package are hierarchical (in this case, tree-shaped),
|
||||||
and utilize basic memoization to speed up repeated lookups.
|
and utilize basic memoization to speed up repeated lookups.
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
|
|
||||||
To represent a symbol, use `Variable`. I opted for the name
|
To represent a symbol, use `Variable`. I opted for the name
|
||||||
`Variable` to avoid conflict with the Dart primitive `Symbol`.
|
`Variable` to avoid conflict with the Dart primitive `Symbol`.
|
||||||
|
|
||||||
|
@ -28,6 +32,7 @@ foo.value = 'baz'; // Also throws a StateError - Once a variable is locked, it c
|
||||||
```
|
```
|
||||||
|
|
||||||
## Visibility
|
## Visibility
|
||||||
|
|
||||||
Variables are *public* by default, but can also be marked as *private* or *protected*. This can be helpful if you are trying
|
Variables are *public* by default, but can also be marked as *private* or *protected*. This can be helpful if you are trying
|
||||||
to determine which symbols should be exported from a library or class.
|
to determine which symbols should be exported from a library or class.
|
||||||
|
|
||||||
|
@ -37,6 +42,7 @@ myVariable.visibility = Visibility.private;
|
||||||
```
|
```
|
||||||
|
|
||||||
# Symbol Tables
|
# Symbol Tables
|
||||||
|
|
||||||
It's easy to create a basic symbol table:
|
It's easy to create a basic symbol table:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
|
@ -67,6 +73,7 @@ var symbol = doubles.resolveOrCreate('one', value: 1.0, constant: true);
|
||||||
```
|
```
|
||||||
|
|
||||||
# Exporting Symbols
|
# Exporting Symbols
|
||||||
|
|
||||||
Due to the tree structure of symbol tables, it is extremely easy to
|
Due to the tree structure of symbol tables, it is extremely easy to
|
||||||
extract a linear list of distinct variables, with variables lower in the hierarchy superseding their parents
|
extract a linear list of distinct variables, with variables lower in the hierarchy superseding their parents
|
||||||
(effectively accomplishing variable shadowing).
|
(effectively accomplishing variable shadowing).
|
||||||
|
@ -83,15 +90,17 @@ var exportedSymbols = mySymbolTable.allPublicVariables;
|
||||||
```
|
```
|
||||||
|
|
||||||
It's easy to extract symbols of a given visibility:
|
It's easy to extract symbols of a given visibility:
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
var exportedSymbols = mySymbolTable.allVariablesWithVisibility(Visibility.protected);
|
var exportedSymbols = mySymbolTable.allVariablesWithVisibility(Visibility.protected);
|
||||||
```
|
```
|
||||||
|
|
||||||
# Child Scopes
|
# Child Scopes
|
||||||
|
|
||||||
There are three ways to create a new symbol table:
|
There are three ways to create a new symbol table:
|
||||||
|
|
||||||
|
|
||||||
## Regular Children
|
## Regular Children
|
||||||
|
|
||||||
This is what most interpreters need; it simply creates a symbol table with the current symbol table
|
This is what most interpreters need; it simply creates a symbol table with the current symbol table
|
||||||
as its parent. The new scope can define its own symbols, which will only shadow the ancestors within the
|
as its parent. The new scope can define its own symbols, which will only shadow the ancestors within the
|
||||||
correct scope.
|
correct scope.
|
||||||
|
@ -102,10 +111,12 @@ var child = mySymbolTable.createChild(values: {...});
|
||||||
```
|
```
|
||||||
|
|
||||||
### Depth
|
### Depth
|
||||||
|
|
||||||
Every symbol table has an associated `depth` attached to it, with the `depth` at the root
|
Every symbol table has an associated `depth` attached to it, with the `depth` at the root
|
||||||
being `0`. When `createChild` is called, the resulting child has an incremented `depth`.
|
being `0`. When `createChild` is called, the resulting child has an incremented `depth`.
|
||||||
|
|
||||||
## Clones
|
## Clones
|
||||||
|
|
||||||
This creates a scope at the same level as the current one, with all the same variables.
|
This creates a scope at the same level as the current one, with all the same variables.
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
|
@ -113,6 +124,7 @@ var clone = mySymbolTable.clone();
|
||||||
```
|
```
|
||||||
|
|
||||||
## Forked Scopes
|
## Forked Scopes
|
||||||
|
|
||||||
If you are implementing a language with closure functions, you might consider looking into this.
|
If you are implementing a language with closure functions, you might consider looking into this.
|
||||||
A forked scope is a scope identical to the current one, but instead of merely copying references
|
A forked scope is a scope identical to the current one, but instead of merely copying references
|
||||||
to variables, the values of variables are copied into new ones.
|
to variables, the values of variables are copied into new ones.
|
||||||
|
@ -129,6 +141,7 @@ var forked = mySymbolTable.fork(values: {...});
|
||||||
```
|
```
|
||||||
|
|
||||||
# Creating Names
|
# Creating Names
|
||||||
|
|
||||||
In languages with block scope, oftentimes, identifiers will collide within a global scope.
|
In languages with block scope, oftentimes, identifiers will collide within a global scope.
|
||||||
To avoid this, symbol tables expose a `uniqueName()` method that simply attaches a numerical suffix to
|
To avoid this, symbol tables expose a `uniqueName()` method that simply attaches a numerical suffix to
|
||||||
an input name. The name is guaranteed to never be repeated within a specific scope.
|
an input name. The name is guaranteed to never be repeated within a specific scope.
|
||||||
|
@ -140,6 +153,7 @@ var name2 = mySymbolTable.uniqueName('foo'); // foo2
|
||||||
```
|
```
|
||||||
|
|
||||||
# `this` Context
|
# `this` Context
|
||||||
|
|
||||||
Many languages handle a sort of `this` context that values within a scope may
|
Many languages handle a sort of `this` context that values within a scope may
|
||||||
optionally be resolved against. Symbol tables can easily set their context
|
optionally be resolved against. Symbol tables can easily set their context
|
||||||
as follows:
|
as follows:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel3_symbol_table
|
name: angel3_symbol_table
|
||||||
version: 2.0.2
|
version: 2.0.3
|
||||||
description: A generic symbol table implementation in Dart, with support for scopes and constants.
|
description: A generic symbol table implementation in Dart, with support for scopes and constants.
|
||||||
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/symbol_table
|
homepage: https://github.com/dukefirehawk/angel/tree/angel3/packages/symbol_table
|
||||||
environment:
|
environment:
|
||||||
|
|
Loading…
Reference in a new issue