Guide to the examples ====================== The examples included are listed roughly in increasing level of complexity. Source transformations and AST transformations can be used interactively in IPython/Jupyter environments; bytecode transformations and custom encoding cannot. Source transformations ---------------------- nobreak as a keyword ~~~~~~~~~~~~~~~~~~~~~ This is a sligthly more complex example than 'function as a keyword', as it shows how to keep track of indentation level and only replace a keyword when some conditions are met. repeat as a keyword ~~~~~~~~~~~~~~~~~~~~ This includes four different transformations, one of which requires to add some extra variables to the original code. It is done in a way that avoid any conflict with existing variable names. It also shows how to include some parameters that are passed back to the source transformation. French Python ~~~~~~~~~~~~~ This is a source transformation that allows one to use French equivalent keywords to the existing ones. It shows how to make use of a different file extension (``.pyfr``), loading such files as if they were regular Python files. French repeat ~~~~~~~~~~~~~~ Extends the French keywords from **French Python** to include those in **repeat as a keyword**. It then combines both examples into a single transformation. Auto-self ~~~~~~~~~~~~~~ This is an example of a syntax that is intended to reduce boilerplate code when initializing a class instance. The code transformation is more complex than the previous ones and include a change of indentation of an entire block of code. Fractional math (token) ~~~~~~~~~~~~~~~~~~~~~~~~ This is a functionally equivalent version to the AST proof of concept example [Fractional math (ast)] mentioned below. It demonstrates how to include supplementary code, such as importing a module or defining a function, in addition to the user code, while ensuring that the console (REPL) can still work properly. Switch statement ~~~~~~~~~~~~~~~~~ Implementing a switch statement as described in the rejected PEP 3103. This example was done quite a few years ago, well before the match statement was added to Python. Implicit multiplication ~~~~~~~~~~~~~~~~~~~~~~~~~ Python's syntax does not allow to write a number followed by an non-keyword identifier or by a parenthesis, nor does it allow to write two non-keyword identifiers in a row. However, when writing equations on paper, these constructs are recognized as indicating a multiplication. This transformation does the same. Abstract Syntax Tree transformations ------------------------------------ Fractional math (AST) ~~~~~~~~~~~~~~~~~~~~~~ This is a proof-of-concept of a transformation at the Abstract Syntax Tree level. It also shows how to include supplementary code, such as importing a module or defining a function, in addition to the user code while ensuring that the console (REPL) can still work properly. Bytecode transformations ------------------------- Confused math ~~~~~~~~~~~~~~~~~ This is a proof-of-concept demonstrating bytecode transformation. Other types ------------ True constants ~~~~~~~~~~~~~~ This is a fairly complex example that illustrates the use of a custom module dict and class. Custom encoding --------------- Import hooks are not the only way one can transform a source; this can also be done by custom encodings. λ encoding ~~~~~~~~~~~~~~~ This is an adaptation of our basic example, but using a custom encoding which needs to be explicitly declared in a file whose source must be transformed.