https://github.com/smallhelm/symbol-table
A data structure for tracking symbols in a compiler or interpreter.
https://github.com/smallhelm/symbol-table
Last synced: 10 months ago
JSON representation
A data structure for tracking symbols in a compiler or interpreter.
- Host: GitHub
- URL: https://github.com/smallhelm/symbol-table
- Owner: smallhelm
- License: mit
- Created: 2016-06-30T13:34:03.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2023-03-08T04:38:05.000Z (about 3 years ago)
- Last Synced: 2024-11-09T09:21:17.641Z (over 1 year ago)
- Language: JavaScript
- Size: 18.6 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# symbol-table
A data structure for tracking symbols in a compiler or interpreter.
```js
var SymbolTable = require("symbol-table");
//create the root scope
var s0 = SymbolTable();
//define some symbols
s0.set("a", 1);
s0.set("b", 2);
//now enter a sub-scope that inherits s0
var s1 = s0.push();
//define/override symbols in the new scope
s1.set("b", 200);
s1.set("c", 300);
//s1 inherited "a"
s1.get("a");
//-> 1
//s1 changed "b"
s1.get("b");
//-> 200
//but s0 "b" was not touched
s0.get("b");
//-> 2
//s1 has "c", but s0 does not
s1.has("c");
//-> true
s0.has("c");
//-> false
```
## API
### s = SymbolTable()
Creates a new symbol table.
### s.has(symbol)
Returns true if the symbol is in scope.
### value = s.get(symbol)
Returns the value associated with that symbol in scope. Returns undefined if not found.
### s.set(symbol, value)
Set the value associated with symbol. This can be anything you want. It can be another data structure if you need to store symbol values and type information for example.
### s.unset(symbol)
Remove a symbol from a scope
### s2 = s.push()
Return a new scope that inherits the current scope.
## Stack
Create a stack of symbol tables/scopes where you always work with the current scope at the top of the stack. It has the same API as the symbol table except you push/pop the scope.
```js
var SymbolTableStack = require("symbol-table/stack");
var s = SymbolTableStack();
s.set("a", 1);
s.push();
s.set("a", 2);
s.get("a");
//-> 2
s.pop();
s.get("a");
//-> 1
```
### has, get, set, unset
These all work the same as the symbol table. However, it will always be the scope at the top of the stack.
### table = s.push()
Creates a new table/scope and pushes it on top of the stack. It also returns the new table.
### table = s.pop()
Pops the current table/scope off the stack.
### i = s.height()
Get the stack height (initially it's 1)
### i = s.getItsHeight(symbol)
What was the stack height when this symbol was set/defined?
Returns undefined if the symbol is not found.
## License
MIT