Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
GSAT
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
josc941e
GSAT
Commits
bcf8c408
Commit
bcf8c408
authored
1 year ago
by
Jonathan Schöbel
Browse files
Options
Downloads
Patches
Plain Diff
Grammar: added rule array
parent
e909e017
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/lib/grammar.c
+26
-0
26 additions, 0 deletions
src/lib/grammar.c
src/lib/grammar.h
+6
-0
6 additions, 0 deletions
src/lib/grammar.h
tests/test_grammar.c
+12
-0
12 additions, 0 deletions
tests/test_grammar.c
with
44 additions
and
0 deletions
src/lib/grammar.c
+
26
−
0
View file @
bcf8c408
...
@@ -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
;
}
}
...
...
This diff is collapsed.
Click to expand it.
src/lib/grammar.h
+
6
−
0
View file @
bcf8c408
...
@@ -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
*
...
...
This diff is collapsed.
Click to expand it.
tests/test_grammar.c
+
12
−
0
View file @
bcf8c408
...
@@ -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
...
...
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