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, ParseInterface
for 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 farrayfslice
return by reference- C.13.2.1 Unconditional array computations and C.13.2.2 Conditional array computations
- underscore kind param, like
.93E7_QUAD
ref standard 4.3.1.2 - keyword conflict between fortran and c++, such as
class
,struct
,int
- arithmatic if
labeled do,ifexit
,cycle
outer do-loopdetailed type attr(addTokenMeta::Int64
, etc.), useTokenMeta::Implicit_Decl
, cleanTokenMeta
enum- 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_merge
RETURN_NT
eliminate copy fromT
toT *
- 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
interface
or forward declaraion of return value is need when calling functions in fortran, so must remove allinterface
andforward 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 : exp
conflict by merging argtable to paramtable1. mergeargtable
anddimen_slice
to paramtable2. only change reduce rulesprintf
arrayfixed length character initialize with shorter charactersadd arraybuilder rule to exp rulesusemake_str_list
function replace some ugly codehidden do(io-implied-do, ac-implied-do, data-implied-do)pointer problem, includingVariableDesc::slice
, deal with nullptrParseNode
inteface change to reference, remove pointer in other structureswon't generate repeated definitions in implicit paramtablesubroutine sub(A) A = 2 end subroutine
temporary_variable
toFunctionInfo
variableregen_if
,regen_do
,regen_suite
delete allgen_
functions exceptgen_token
with multiple which accepts a list ofYYSTYPE
.,regen_paramtable
regen_function_array
log all arguments in paramtable toget_context().variable
use. renameis_exp
function instead ofNT_EXPRESSION
nodeNT_EXPRESSION
toNT_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 = c
solve(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_node
from pointer toParseNode
- interface function's
local_name
, refget_full_paramtable
regen_exp
andregen_slice
should be called exactly once inget_sliceinfo_base
method