Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
compiler-construction
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
User expired
compiler-construction
Commits
3a24754b
Commit
3a24754b
authored
5 years ago
by
FlorianKrull
Browse files
Options
Downloads
Patches
Plain Diff
Added identifier
parent
82de390e
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
include/mcc/tac_build.h
+2
-0
2 additions, 0 deletions
include/mcc/tac_build.h
src/assembly_gen.c
+101
-437
101 additions, 437 deletions
src/assembly_gen.c
src/tac_build.c
+21
-18
21 additions, 18 deletions
src/tac_build.c
test/integration/prime/prime.mc
+1
-1
1 addition, 1 deletion
test/integration/prime/prime.mc
with
125 additions
and
456 deletions
include/mcc/tac_build.h
+
2
−
0
View file @
3a24754b
...
...
@@ -7,6 +7,8 @@
struct
mcc_tac
*
mcc_tac_build
(
struct
mcc_ast_program
*
program
,
struct
mcc_symbol_table
*
st
);
void
parse_params
(
struct
mcc_ast_parameter
*
parameter
,
struct
mcc_tac
*
tac
);
void
mcc_tac_parse_statement
(
struct
mcc_ast_statement
*
statement
,
struct
mcc_tac
*
tac
);
void
mcc_tac_parse_statement_list
(
struct
mcc_ast_statement_list
*
stl
,
struct
mcc_tac
*
tac
);
...
...
This diff is collapsed.
Click to expand it.
src/assembly_gen.c
+
101
−
437
View file @
3a24754b
This diff is collapsed.
Click to expand it.
src/tac_build.c
+
21
−
18
View file @
3a24754b
...
...
@@ -345,24 +345,24 @@ void mcc_tac_parse_statement(struct mcc_ast_statement *statement, struct mcc_tac
// -------------------------------- parse function
// TODO: check if not used when assembly code is generated (probably not) -> then kick this out
//
void parse_params(struct mcc_ast_parameter *parameter, struct mcc_tac *tac) {
//
// parse params from right to left
//
for(int i = 0; i < parameter->parameters->size; i++) {
//
struct mcc_ast_declaration *param_decl = (struct mcc_ast_declaration *) parameter->parameters->arr[i];
//
bool is_array = param_decl->arr_literal != NULL;
//
enum mcc_tac_operation tac_op = mcc_convert_ast_type_to_tac_param(param_decl->type, is_array);
//
//
// save array size in first argument
//
int number_of_digits = mcc_get_number_of_digits(param_decl->arr_literal->i_value);
//
char *arg1 = NULL;
//
//
if(is_array) {
//
snprintf(arg1, sizeof(char) * number_of_digits, "%d", param_decl->arr_literal->i_value);
//
}
//
//
mcc_tac_create_and_add_new_entry(tac_op, arg1, NULL, param_decl->ident->i_value, tac);
//
}
//
}
void
parse_params
(
struct
mcc_ast_parameter
*
parameter
,
struct
mcc_tac
*
tac
)
{
// parse params from right to left
for
(
int
i
=
0
;
i
<
parameter
->
parameters
->
size
;
i
++
)
{
struct
mcc_ast_declaration
*
param_decl
=
(
struct
mcc_ast_declaration
*
)
parameter
->
parameters
->
arr
[
i
];
bool
is_array
=
param_decl
->
arr_literal
!=
NULL
;
enum
mcc_tac_operation
tac_op
=
mcc_convert_ast_type_to_tac_param
_pop
(
param_decl
->
type
,
is_array
);
// save array size in first argument
int
number_of_digits
=
mcc_get_number_of_digits
(
param_decl
->
arr_literal
->
i_value
);
char
*
arg1
=
NULL
;
if
(
is_array
)
{
snprintf
(
arg1
,
sizeof
(
char
)
*
number_of_digits
,
"%d"
,
param_decl
->
arr_literal
->
i_value
);
}
mcc_tac_create_and_add_new_entry
(
tac_op
,
arg1
,
NULL
,
param_decl
->
ident
->
i_value
,
tac
);
}
}
void
mcc_tac_parse_function
(
struct
mcc_ast_function
*
f
,
struct
mcc_tac
*
tac
)
{
assert
(
f
);
...
...
@@ -377,6 +377,9 @@ void mcc_tac_parse_function(struct mcc_ast_function *f, struct mcc_tac *tac) {
sprintf
(
arg1
,
"%d"
,
tac
->
funcion_counter
);
mcc_tac_create_and_add_new_entry
(
MCC_TAC_FUNCTION_START
,
arg1
,
f
->
identifier
->
i_value
,
NULL
,
tac
);
// if(f->parameter){
// parse_params(f->parameter,tac);
// }
if
(
f
->
statement
!=
NULL
)
{
mcc_tac_parse_statement
(
f
->
statement
,
tac
);
...
...
This diff is collapsed.
Click to expand it.
test/integration/prime/prime.mc
+
1
−
1
View file @
3a24754b
...
...
@@ -3,7 +3,7 @@ int is_prime(int n)
int i;
i = 2;
int mod;
while (i
<
n
/
2)
{
while (i
<
(
n
/
2)
)
{
mod =
n
-
(
n
/
i
)
*
i
;
if
(mod =
=
0)
{
return
0;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment