Better code quality for ACC
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
%option yylineno
|
%option yylineno
|
||||||
%option noyywrap
|
%option noyywrap
|
||||||
|
%option noinput
|
||||||
|
%option nounput
|
||||||
|
|
||||||
D [0-9]
|
D [0-9]
|
||||||
L [a-zA-Z_]
|
L [a-zA-Z_]
|
||||||
|
@@ -179,7 +179,7 @@ add_symbol(const SymbolType type, const int tqualifier, const int tspecifier, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_symbol2(const Symbol* symbol)
|
print_symbol(const Symbol* symbol)
|
||||||
{
|
{
|
||||||
const char* fields[] = {
|
const char* fields[] = {
|
||||||
translate(symbol->type_qualifier),
|
translate(symbol->type_qualifier),
|
||||||
@@ -193,23 +193,6 @@ print_symbol2(const Symbol* symbol)
|
|||||||
fprintf(CUDAHEADER, "%s ", fields[i]);
|
fprintf(CUDAHEADER, "%s ", fields[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
print_symbol(const size_t handle)
|
|
||||||
{
|
|
||||||
assert(handle < SYMBOL_TABLE_SIZE);
|
|
||||||
|
|
||||||
const char* fields[] = {
|
|
||||||
translate(symbol_table[handle].type_qualifier),
|
|
||||||
translate(symbol_table[handle].type_specifier),
|
|
||||||
symbol_table[handle].identifier,
|
|
||||||
};
|
|
||||||
|
|
||||||
const size_t num_fields = sizeof(fields) / sizeof(fields[0]);
|
|
||||||
for (size_t i = 0; i < num_fields; ++i)
|
|
||||||
if (fields[i])
|
|
||||||
printf("%s ", fields[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
print_symbol_table(void)
|
print_symbol_table(void)
|
||||||
{
|
{
|
||||||
@@ -291,7 +274,7 @@ traverse(const ASTNode* node)
|
|||||||
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
|
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
|
||||||
if (symbol && symbol->type_qualifier == KERNEL) {
|
if (symbol && symbol->type_qualifier == KERNEL) {
|
||||||
fprintf(CUDAHEADER, "GEN_KERNEL_BUILTIN_VARIABLES_BOILERPLATE();");
|
fprintf(CUDAHEADER, "GEN_KERNEL_BUILTIN_VARIABLES_BOILERPLATE();");
|
||||||
for (int i = 0; i < num_symbols[current_nest]; ++i) {
|
for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
|
||||||
if (symbol_table[i].type_qualifier == IN) {
|
if (symbol_table[i].type_qualifier == IN) {
|
||||||
fprintf(CUDAHEADER, "const %sData %s = READ(handle_%s);\n",
|
fprintf(CUDAHEADER, "const %sData %s = READ(handle_%s);\n",
|
||||||
translate(symbol_table[i].type_specifier),
|
translate(symbol_table[i].type_specifier),
|
||||||
@@ -388,7 +371,7 @@ traverse(const ASTNode* node)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print_symbol2(&symbol_table[num_symbols[current_nest] - 1]);
|
print_symbol(&symbol_table[num_symbols[current_nest] - 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tqualifier == IN || tqualifier == OUT) { // Global in/out declarator
|
else if (tqualifier == IN || tqualifier == OUT) { // Global in/out declarator
|
||||||
@@ -399,7 +382,7 @@ traverse(const ASTNode* node)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Do a regular translation
|
// Do a regular translation
|
||||||
print_symbol2(&symbol_table[num_symbols[current_nest] - 1]);
|
print_symbol(&symbol_table[num_symbols[current_nest] - 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->rhs->type == NODE_ARRAY_DECLARATION) {
|
if (node->rhs->type == NODE_ARRAY_DECLARATION) {
|
||||||
@@ -468,7 +451,7 @@ traverse(const ASTNode* node)
|
|||||||
if (node->parent->type == NODE_FUNCTION_DEFINITION) {
|
if (node->parent->type == NODE_FUNCTION_DEFINITION) {
|
||||||
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
|
const Symbol* symbol = symboltable_lookup(node->parent->lhs->lhs->rhs->buffer);
|
||||||
if (symbol && symbol->type_qualifier == KERNEL) {
|
if (symbol && symbol->type_qualifier == KERNEL) {
|
||||||
for (int i = 0; i < num_symbols[current_nest]; ++i) {
|
for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
|
||||||
if (symbol_table[i].type_qualifier == OUT) {
|
if (symbol_table[i].type_qualifier == OUT) {
|
||||||
fprintf(CUDAHEADER, "WRITE_OUT(handle_%s, %s);\n",
|
fprintf(CUDAHEADER, "WRITE_OUT(handle_%s, %s);\n",
|
||||||
symbol_table[i].identifier, symbol_table[i].identifier);
|
symbol_table[i].identifier, symbol_table[i].identifier);
|
||||||
@@ -639,7 +622,7 @@ generate_header(void)
|
|||||||
static void
|
static void
|
||||||
generate_library_hooks(void)
|
generate_library_hooks(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < num_symbols[current_nest]; ++i) {
|
for (size_t i = 0; i < num_symbols[current_nest]; ++i) {
|
||||||
if (symbol_table[i].type_qualifier == KERNEL) {
|
if (symbol_table[i].type_qualifier == KERNEL) {
|
||||||
fprintf(CUDAHEADER, "GEN_DEVICE_FUNC_HOOK(%s)\n", symbol_table[i].identifier);
|
fprintf(CUDAHEADER, "GEN_DEVICE_FUNC_HOOK(%s)\n", symbol_table[i].identifier);
|
||||||
}
|
}
|
||||||
@@ -647,7 +630,7 @@ generate_library_hooks(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(void)
|
||||||
{
|
{
|
||||||
root = astnode_create(NODE_UNKNOWN, NULL, NULL);
|
root = astnode_create(NODE_UNKNOWN, NULL, NULL);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user