Skip to content
Snippets Groups Projects
Commit bcf8c408 authored by Jonathan Schöbel's avatar Jonathan Schöbel
Browse files

Grammar: added rule array

parent e909e017
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,17 @@ struct symbol_info ...@@ -39,6 +39,17 @@ struct symbol_info
bool is_terminal; bool is_terminal;
}; };
struct rule_info
{
rule_t id;
size_t src_n;
symbol_t * src;
size_t dest_n;
symbol_t * dest;
};
struct GR_Grammar struct GR_Grammar
{ {
/*@only@*/ char * name; /*@only@*/ char * name;
...@@ -47,6 +58,9 @@ struct GR_Grammar ...@@ -47,6 +58,9 @@ struct GR_Grammar
size_t symbol_n; size_t symbol_n;
struct symbol_info * symbols; struct symbol_info * symbols;
size_t rule_n;
struct rule_info * rules;
}; };
...@@ -105,6 +119,9 @@ GR_Grammar_new (const char * name, ...@@ -105,6 +119,9 @@ GR_Grammar_new (const char * name,
grammar->symbols = NULL; grammar->symbols = NULL;
grammar->symbol_n = 0; grammar->symbol_n = 0;
grammar->rules = NULL;
grammar->rule_n = 0;
set_success (status); set_success (status);
return grammar; return grammar;
...@@ -142,6 +159,9 @@ GR_Grammar_raw_new (/*@only@*/ char * name, ...@@ -142,6 +159,9 @@ GR_Grammar_raw_new (/*@only@*/ char * name,
grammar->symbols = NULL; grammar->symbols = NULL;
grammar->symbol_n = 0; grammar->symbol_n = 0;
grammar->rules = NULL;
grammar->rule_n = 0;
set_success (status); set_success (status);
return grammar; return grammar;
} }
...@@ -158,6 +178,12 @@ GR_Grammar_free (/*@out@*/ struct GR_Grammar * grammar) ...@@ -158,6 +178,12 @@ GR_Grammar_free (/*@out@*/ struct GR_Grammar * grammar)
free (grammar->symbols[i].name); free (grammar->symbols[i].name);
} }
for (size_t i = 0; i < grammar->rule_n; i++)
{
free (grammar->rules[i].src);
free (grammar->rules[i].dest);
}
free (grammar); free (grammar);
return; return;
} }
......
...@@ -38,6 +38,12 @@ typedef unsigned int symbol_t; ...@@ -38,6 +38,12 @@ typedef unsigned int symbol_t;
#define SYMBOL_MAX UINT_MAX #define SYMBOL_MAX UINT_MAX
typedef unsigned int rule_t;
#define RULE_ERR 0
#define RULE_MAX UINT_MAX
/*@null@*/ /*@null@*/
/*@only@*/ /*@only@*/
GR_Grammar * GR_Grammar *
......
...@@ -47,6 +47,9 @@ START_TEST(test_grammar_no_status) ...@@ -47,6 +47,9 @@ START_TEST(test_grammar_no_status)
ck_assert_int_eq (0, grammar->symbol_n); ck_assert_int_eq (0, grammar->symbol_n);
ck_assert_ptr_eq (NULL, grammar->symbols); ck_assert_ptr_eq (NULL, grammar->symbols);
ck_assert_int_eq (0, grammar->rule_n);
ck_assert_ptr_eq (NULL, grammar->rules);
GR_Grammar_free (grammar); GR_Grammar_free (grammar);
} }
END_TEST END_TEST
...@@ -70,6 +73,9 @@ START_TEST(test_grammar_with_status) ...@@ -70,6 +73,9 @@ START_TEST(test_grammar_with_status)
ck_assert_int_eq (0, grammar->symbol_n); ck_assert_int_eq (0, grammar->symbol_n);
ck_assert_ptr_eq (NULL, grammar->symbols); ck_assert_ptr_eq (NULL, grammar->symbols);
ck_assert_int_eq (0, grammar->rule_n);
ck_assert_ptr_eq (NULL, grammar->rules);
GR_Grammar_free (grammar); GR_Grammar_free (grammar);
} }
END_TEST END_TEST
...@@ -94,6 +100,9 @@ START_TEST(test_grammar_raw_no_status) ...@@ -94,6 +100,9 @@ START_TEST(test_grammar_raw_no_status)
ck_assert_int_eq (0, grammar->symbol_n); ck_assert_int_eq (0, grammar->symbol_n);
ck_assert_ptr_eq (NULL, grammar->symbols); ck_assert_ptr_eq (NULL, grammar->symbols);
ck_assert_int_eq (0, grammar->rule_n);
ck_assert_ptr_eq (NULL, grammar->rules);
GR_Grammar_free (grammar); GR_Grammar_free (grammar);
} }
END_TEST END_TEST
...@@ -121,6 +130,9 @@ START_TEST(test_grammar_raw_with_status) ...@@ -121,6 +130,9 @@ START_TEST(test_grammar_raw_with_status)
ck_assert_int_eq (0, grammar->symbol_n); ck_assert_int_eq (0, grammar->symbol_n);
ck_assert_ptr_eq (NULL, grammar->symbols); ck_assert_ptr_eq (NULL, grammar->symbols);
ck_assert_int_eq (0, grammar->rule_n);
ck_assert_ptr_eq (NULL, grammar->rules);
GR_Grammar_free (grammar); GR_Grammar_free (grammar);
} }
END_TEST END_TEST
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment