A compiler for the F language (and it's definition)
-
Core features
- Standard library
- Names can't be reused
- Add support to maps [!]
- Add void type keyword in both Lexer and Parser
- Standard library
-
Extra features
- Add := Read (?)
- Add warning when declaring variables overriding an existing name
- Print tuple names when specified
- Improve Read() RunTime function
- Consider Buffer approach
- More flexible "type checking" (trim whitespaces and the like)
- Consider reading advanced types (arrays, tuples, maps)
- Allow
\
-escaped characters in string read ?
- Load external library from another folder
-
Code organization
- Split Generator class in multiple files
- Organize FAST code better in files
- Move Generate as Generator static method + overload
-
Check if it's done correctly
- GetTarget / Comparisons of non-NumericTypes
- Check how we deal with types in declaration / indexed access
- GetValueType in ParameterList / TypeList
- Type check in recursive functions, error right now for wrong deduction is not very clear, also I don't like setting the type to null, so maybe we should have a RecursionType or something like that - even if null is particularly handy as it gets already recalculated (but we can make recursiontype to be recalculated too!)
- Check behaviours of iterators/ellipsis to see if they are well integrated with last features (functions and capturing in particular)
- Loops without header (?)
-
Lexical analysis
- Think if more
\
-escaped character are needed (currently support\n
,\t
,\\
,\"
) - Think about
\n
instead of;
for SEMICOLON tokens - Add Lexer support for -2^31
- Handling error token
- Think if more
-
Parsing
- Remove parentheses from
func => ()
, or determine it's impossible
- Remove parentheses from
-
Lexical analysis
-
Parsing
- Grammar
- Semantic actions
- AST structure
-
Mappings (main constructs, nested functions)
- Refer to code generation progress
-
Code generation (while creating mappings)
- Expressions
- Read
- Symbols lookup
- Nested scopes
- Declarations
- Assignments
- Numeric types
- Operators
- Standard library functions
- Arrays
- Empty arrays
- Concatenation
- Indexed access
- Iterator
- Strings
- Same operators as arrays ?
- Maps
- Tuples
- Conditional expressions
- Conditional statements
- Loop statements
- While loops
- For loops
- Just loop
- Ellipsis
- Functions
- Nested functions
- Capturing used variables
-
Debugging and Testing (consider developing robust tests for all part of the compiler)
- Lexer error handling support
- Parsing error handling support
- Compilation error handling support
- Custom Exception type
-
Runtime error handling support
-
Writing a report
- Known bugs:
- Nothing that is not already mentioned as not done