fedemengo / FFC

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FFC

A compiler for the F language (and it's definition)

TODOs

  • Core features

    • Standard library
      • Names can't be reused
    • Add support to maps [!]
    • Add void type keyword in both Lexer and Parser
  • 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
  • Parsing

    • Remove parentheses from func => (), or determine it's impossible

Progress

  • Lexical analysis

  • Parsing

    • Grammar
    • Semantic actions
    • AST structure
  • Mappings (main constructs, nested functions)

    • Refer to code generation progress
  • Code generation (while creating mappings)

    • Expressions
    • Print
    • 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

Notes

  • Known bugs:
    1. Nothing that is not already mentioned as not done

About


Languages

Language:C# 94.6%Language:Yacc 4.4%Language:Shell 1.0%