wip: working on analyzer

- Feat: add `nest_ctx` and `fin_ctx` fns for working with context and
environment
- Feat: add block analyzer
- Feat: add conditional statement analyzer
This commit is contained in:
samsonium
2026-10-26 21:34:54 +03:00
parent 62ae05b4cd
commit a70ad011f3
9 changed files with 165 additions and 35 deletions
+22 -15
View File
@@ -16,21 +16,6 @@ typedef enum
FZL_AN_CTX_TYPE_LOOP, // when analyzing loop
} fzl_an_ctx_type_t;
// Analyzer descriptor
typedef struct
{
char *warnings[256];
size_t warnings_top;
char *errors[256];
size_t errors_top;
fzl_symtable_t *symbols[256];
size_t symbols_top;
fzl_node_t *root;
} fzl_analyzer_t;
// Inner node analyzing result descriptor
typedef struct
{
@@ -48,6 +33,22 @@ typedef struct fzl_an_ctx
fzl_an_ctx_type_t type;
} fzl_an_ctx_t;
// Analyzer descriptor
typedef struct
{
char *warnings[256];
size_t warnings_top;
char *errors[256];
size_t errors_top;
fzl_symtable_t *symbols[256];
size_t symbols_top;
fzl_node_t *root;
fzl_an_ctx_t *ctx;
} fzl_analyzer_t;
// Temp container for error
extern char alast_error[256];
@@ -69,5 +70,11 @@ void fzl_freeanalyzer(fzl_analyzer_t *analyzer);
fzl_an_res_t analyze_common(fzl_analyzer_t *analyzer, fzl_node_t *node);
fzl_an_res_t analyze_call(fzl_analyzer_t *analyzer, fzl_node_t *call_node);
fzl_an_res_t analyze_identifier(fzl_analyzer_t *analyzer, fzl_node_t *id);
fzl_an_res_t analyze_conditional(fzl_analyzer_t *analyzer, fzl_node_t *cond);
fzl_an_res_t analyze_function(fzl_analyzer_t *analyzer, fzl_node_t *fn_node);
fzl_an_res_t analyze_block(fzl_analyzer_t *analyzer, fzl_node_t *block_node);
fzl_an_ctx_t *an_nest_ctx(fzl_analyzer_t *analyzer, fzl_an_ctx_type_t type);
fzl_an_ctx_t *an_fin_ctx(fzl_analyzer_t *analyzer);
#endif // FZL_ANALYZER_H