|
|
10 years ago | |
|---|---|---|
| errorcode | 10 years ago | |
| scanner | 10 years ago | |
| token | 10 years ago | |
| LICENSE | 10 years ago | |
| README.md | 10 years ago | |
| main.go | 10 years ago | |
This project is currently a for-fun work in progress.
The main goals of this project are to learn about programming languages by trying to rewrite CPython 3.5.0 in Go.
So far I have a mostly working scanner/tokenizer. The main goal was to be able to generate similar output as running python3 -m tokenize --exact <script.py>.
Currently there are a few small differences between the output format, but the tokens being produced are the same.
Next up is going to be writing the parser to be able to generate an AST which will match the form provided from:
import ast
import pprint
def main(filename):
with open(filename, 'r') as fp:
contents = fp.read()
root = ast.parse(contents, filename)
pprint.pprint(ast.dump(root, include_attributes=True))
if __name__ == '__main__':
import sys
main(sys.argv[1])
python3 parse.py <script.py>
The compiler will be up after the parser. The compiler will be responsible for converting the parsed AST into Python bytecode.
The interpreter will be up after the compiler and will be able to execute on Python bytecode.