lazygenfunction-array reduction-reduction conflictmulti-dimension forarraymulti-dimension forarray array-builder- for90std functions
- file
- array(reshape, spread, transpose)
io formatteroptional parameterskeyword parameter listreference in parameter listrewrite paramtable and var_def(simplify right-recursive rules, move dimension to dummy_variale_iden)more elegant multi-word keyword handler(instead of defined in regular expression)function forward declaration(if necessary)- c-style array(partial)
- variable with type
enable crlf rule(may cause bugs)mixed array_buildermore specific type(char, int, long long)- derived type stmt(4.4.1)
commentsone-line iferror infomation include Intent nameallow named blockssupport function pointers, ParseInterfacefor function pointerhidden domore precise code/error location, start/end- optimize ParseNode with rvalue
support fortran77 standardfarraygoto stmtuse fortran array [from, to] rather than [from, to)promote return type in formerge so it can accept 2 different type farrayfslicereturn by reference- C.13.2.1 Unconditional array computations and C.13.2.2 Conditional array computations
- underscore kind param, like
.93E7_QUADref standard 4.3.1.2 - keyword conflict between fortran and c++, such as
class,struct,int - arithmatic if
labeled do,ifexit,cycleouter do-loopdetailed type attr(addTokenMeta::Int64, etc.), useTokenMeta::Implicit_Decl, cleanTokenMetaenum- unicode file
- underscore kind-param for all type literal(ref 4.3.2.1)
display comments- support other C++ compilers
- free format continuation(ref 3.3.1.3)
- optimize performance
gen_mergeRETURN_NTeliminate copy fromTtoT *
- range
- ref
ConfigImplicit
- ref
if slice can be a scalar x and equal to (1: x + 1), there will be conflict in argtable- more specific type cast functions(char, int, long long)
read statement undefined deviceminus 1 and negative 1 conflict(modify definition in .l)- either an
interfaceor forward declaraion of return value is need when calling functions in fortran, so must remove allinterfaceandforward declaraion of function return valuein generated code in order to avoid repeat definition. error message line info is always 0handle error when can't find declaration of the variable listed in function paramtablehandle with empty linesplit keyvalue rules from paramtable rules, may cause bugs_type_kind rules and type cast function call conflictsolveparamtable : exp,argtable : expconflict by merging argtable to paramtable1. mergeargtableanddimen_sliceto paramtable2. only change reduce rulesprintfarrayfixed length character initialize with shorter charactersadd arraybuilder rule to exp rulesusemake_str_listfunction replace some ugly codehidden do(io-implied-do, ac-implied-do, data-implied-do)pointer problem, includingVariableDesc::slice, deal with nullptrParseNodeinteface change to reference, remove pointer in other structureswon't generate repeated definitions in implicit paramtablesubroutine sub(A) A = 2 end subroutinetemporary_variabletoFunctionInfovariableregen_if,regen_do,regen_suitedelete allgen_functions exceptgen_tokenwith multiple which accepts a list ofYYSTYPE.,regen_paramtableregen_function_arraylog all arguments in paramtable toget_context().variableuse. renameis_expfunction instead ofNT_EXPRESSIONnodeNT_EXPRESSIONtoNT_ARITH_EXP, which constructed only by arithmatic rules- declare all implicit variables (ref demos/implicit variable.txt)
implicit variable in variable declaration like:integer a = csolve(i+1,i+2, i = 1, 2)in IO functiontokenizer: real type(4.3.1.2) conflict with operators, refer demos/control/tokenizer.txt- enum-reflect.h can not calculate value like
Void - 100, refermake_enum_table's TODO - change
VariableInfo::vardef_nodefrom pointer toParseNode - interface function's
local_name, refget_full_paramtable regen_expandregen_sliceshould be called exactly once inget_sliceinfo_basemethod