Use 1-based row and column values for position values - close #30
This commit is contained in:
parent
98e10d3d14
commit
1d468b6d3c
@ -60,6 +60,8 @@ void <%= @grammar.prefix %>context_init(<%= @grammar.prefix %>context_t * contex
|
|||||||
/* Lexer initialization. */
|
/* Lexer initialization. */
|
||||||
newcontext.input = input;
|
newcontext.input = input;
|
||||||
newcontext.input_length = input_length;
|
newcontext.input_length = input_length;
|
||||||
|
newcontext.text_position.row = 1u;
|
||||||
|
newcontext.text_position.col = 1u;
|
||||||
newcontext.mode = <%= @lexer.mode_id("default") %>;
|
newcontext.mode = <%= @lexer.mode_id("default") %>;
|
||||||
|
|
||||||
/* Copy to the user's context structure. */
|
/* Copy to the user's context structure. */
|
||||||
@ -365,7 +367,7 @@ static size_t find_longest_match(<%= @grammar.prefix %>context_t * context,
|
|||||||
if (code_point == '\n')
|
if (code_point == '\n')
|
||||||
{
|
{
|
||||||
attempt_match.delta_position.row++;
|
attempt_match.delta_position.row++;
|
||||||
attempt_match.delta_position.col = 0u;
|
attempt_match.delta_position.col = 1u;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -567,7 +569,7 @@ size_t <%= @grammar.prefix %>lex(<%= @grammar.prefix %>context_t * context, <%=
|
|||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/** Invalid position value. */
|
/** Invalid position value. */
|
||||||
#define INVALID_POSITION (<%= @grammar.prefix %>position_t){0xFFFFFFFFu, 0xFFFFFFFFu}
|
#define INVALID_POSITION (<%= @grammar.prefix %>position_t){0u, 0u}
|
||||||
|
|
||||||
/** Reduce ID type. */
|
/** Reduce ID type. */
|
||||||
typedef <%= get_type_for(@parser.reduce_table.size) %> reduce_id_t;
|
typedef <%= get_type_for(@parser.reduce_table.size) %> reduce_id_t;
|
||||||
|
|||||||
@ -65,12 +65,12 @@ public struct <%= @grammar.prefix %>position_t
|
|||||||
uint col;
|
uint col;
|
||||||
|
|
||||||
/** Invalid position value. */
|
/** Invalid position value. */
|
||||||
enum INVALID = <%= @grammar.prefix %>position_t(0xFFFF_FFFF, 0xFFFF_FFFF);
|
enum INVALID = <%= @grammar.prefix %>position_t(0u, 0u);
|
||||||
|
|
||||||
/** Return whether the position is valid. */
|
/** Return whether the position is valid. */
|
||||||
public @property bool valid()
|
public @property bool valid()
|
||||||
{
|
{
|
||||||
return row != 0xFFFF_FFFFu;
|
return row != 0u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,6 +235,8 @@ public void <%= @grammar.prefix %>context_init(<%= @grammar.prefix %>context_t *
|
|||||||
|
|
||||||
/* Lexer initialization. */
|
/* Lexer initialization. */
|
||||||
newcontext.input = input;
|
newcontext.input = input;
|
||||||
|
newcontext.text_position.row = 1u;
|
||||||
|
newcontext.text_position.col = 1u;
|
||||||
newcontext.mode = <%= @lexer.mode_id("default") %>;
|
newcontext.mode = <%= @lexer.mode_id("default") %>;
|
||||||
|
|
||||||
/* Copy to the user's context structure. */
|
/* Copy to the user's context structure. */
|
||||||
@ -534,7 +536,7 @@ private size_t find_longest_match(<%= @grammar.prefix %>context_t * context,
|
|||||||
if (code_point == '\n')
|
if (code_point == '\n')
|
||||||
{
|
{
|
||||||
attempt_match.delta_position.row++;
|
attempt_match.delta_position.row++;
|
||||||
attempt_match.delta_position.col = 0u;
|
attempt_match.delta_position.col = 1u;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -53,7 +53,7 @@ typedef struct
|
|||||||
} <%= @grammar.prefix %>position_t;
|
} <%= @grammar.prefix %>position_t;
|
||||||
|
|
||||||
/** Return whether the position is valid. */
|
/** Return whether the position is valid. */
|
||||||
#define <%= @grammar.prefix %>position_valid(p) ((p).row != 0xFFFFFFFFu)
|
#define <%= @grammar.prefix %>position_valid(p) ((p).row != 0u)
|
||||||
|
|
||||||
/** User header code blocks. */
|
/** User header code blocks. */
|
||||||
<%= @grammar.code_blocks.fetch("header", "") %>
|
<%= @grammar.code_blocks.fetch("header", "") %>
|
||||||
|
|||||||
@ -777,7 +777,7 @@ A pointer to this instance is passed to the generated functions.
|
|||||||
### `p_position_t`
|
### `p_position_t`
|
||||||
|
|
||||||
The `p_position_t` structure contains two fields `row` and `col`.
|
The `p_position_t` structure contains two fields `row` and `col`.
|
||||||
These fields contain the 0-based row and column describing a parser position.
|
These fields contain the 1-based row and column describing a parser position.
|
||||||
|
|
||||||
For D targets, the `p_position_t` structure can be checked for validity by
|
For D targets, the `p_position_t` structure can be checked for validity by
|
||||||
querying the `valid` property.
|
querying the `valid` property.
|
||||||
|
|||||||
@ -11,92 +11,92 @@ int main()
|
|||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
Start * start = p_result(&context);
|
Start * start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(1, start->pT1->pToken->position.row);
|
assert_eq(2, start->pT1->pToken->position.row);
|
||||||
assert_eq(0, start->pT1->pToken->position.col);
|
assert_eq(1, start->pT1->pToken->position.col);
|
||||||
assert_eq(1, start->pT1->pToken->end_position.row);
|
assert_eq(2, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.col);
|
assert_eq(1, start->pT1->pToken->end_position.col);
|
||||||
assert(p_position_valid(start->pT1->pA->position));
|
assert(p_position_valid(start->pT1->pA->position));
|
||||||
assert_eq(2, start->pT1->pA->position.row);
|
assert_eq(3, start->pT1->pA->position.row);
|
||||||
assert_eq(2, start->pT1->pA->position.col);
|
assert_eq(3, start->pT1->pA->position.col);
|
||||||
assert_eq(2, start->pT1->pA->end_position.row);
|
assert_eq(3, start->pT1->pA->end_position.row);
|
||||||
assert_eq(7, start->pT1->pA->end_position.col);
|
assert_eq(8, start->pT1->pA->end_position.col);
|
||||||
assert_eq(1, start->pT1->position.row);
|
assert_eq(2, start->pT1->position.row);
|
||||||
assert_eq(0, start->pT1->position.col);
|
assert_eq(1, start->pT1->position.col);
|
||||||
assert_eq(2, start->pT1->end_position.row);
|
assert_eq(3, start->pT1->end_position.row);
|
||||||
assert_eq(7, start->pT1->end_position.col);
|
assert_eq(8, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(1, start->position.row);
|
assert_eq(2, start->position.row);
|
||||||
assert_eq(0, start->position.col);
|
assert_eq(1, start->position.col);
|
||||||
assert_eq(2, start->end_position.row);
|
assert_eq(3, start->end_position.row);
|
||||||
assert_eq(7, start->end_position.col);
|
assert_eq(8, start->end_position.col);
|
||||||
|
|
||||||
input = "a\nbb";
|
input = "a\nbb";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start->pT1->pToken->position.row);
|
assert_eq(1, start->pT1->pToken->position.row);
|
||||||
assert_eq(0, start->pT1->pToken->position.col);
|
assert_eq(1, start->pT1->pToken->position.col);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.row);
|
assert_eq(1, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.col);
|
assert_eq(1, start->pT1->pToken->end_position.col);
|
||||||
assert(p_position_valid(start->pT1->pA->position));
|
assert(p_position_valid(start->pT1->pA->position));
|
||||||
assert_eq(1, start->pT1->pA->position.row);
|
assert_eq(2, start->pT1->pA->position.row);
|
||||||
assert_eq(0, start->pT1->pA->position.col);
|
assert_eq(1, start->pT1->pA->position.col);
|
||||||
assert_eq(1, start->pT1->pA->end_position.row);
|
assert_eq(2, start->pT1->pA->end_position.row);
|
||||||
assert_eq(1, start->pT1->pA->end_position.col);
|
assert_eq(2, start->pT1->pA->end_position.col);
|
||||||
assert_eq(0, start->pT1->position.row);
|
assert_eq(1, start->pT1->position.row);
|
||||||
assert_eq(0, start->pT1->position.col);
|
assert_eq(1, start->pT1->position.col);
|
||||||
assert_eq(1, start->pT1->end_position.row);
|
assert_eq(2, start->pT1->end_position.row);
|
||||||
assert_eq(1, start->pT1->end_position.col);
|
assert_eq(2, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->position.row);
|
assert_eq(1, start->position.row);
|
||||||
assert_eq(0, start->position.col);
|
assert_eq(1, start->position.col);
|
||||||
assert_eq(1, start->end_position.row);
|
assert_eq(2, start->end_position.row);
|
||||||
assert_eq(1, start->end_position.col);
|
assert_eq(2, start->end_position.col);
|
||||||
|
|
||||||
input = "a\nc\nc";
|
input = "a\nc\nc";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start->pT1->pToken->position.row);
|
assert_eq(1, start->pT1->pToken->position.row);
|
||||||
assert_eq(0, start->pT1->pToken->position.col);
|
assert_eq(1, start->pT1->pToken->position.col);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.row);
|
assert_eq(1, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.col);
|
assert_eq(1, start->pT1->pToken->end_position.col);
|
||||||
assert(p_position_valid(start->pT1->pA->position));
|
assert(p_position_valid(start->pT1->pA->position));
|
||||||
assert_eq(1, start->pT1->pA->position.row);
|
assert_eq(2, start->pT1->pA->position.row);
|
||||||
assert_eq(0, start->pT1->pA->position.col);
|
assert_eq(1, start->pT1->pA->position.col);
|
||||||
assert_eq(2, start->pT1->pA->end_position.row);
|
assert_eq(3, start->pT1->pA->end_position.row);
|
||||||
assert_eq(0, start->pT1->pA->end_position.col);
|
assert_eq(1, start->pT1->pA->end_position.col);
|
||||||
assert_eq(0, start->pT1->position.row);
|
assert_eq(1, start->pT1->position.row);
|
||||||
assert_eq(0, start->pT1->position.col);
|
assert_eq(1, start->pT1->position.col);
|
||||||
assert_eq(2, start->pT1->end_position.row);
|
assert_eq(3, start->pT1->end_position.row);
|
||||||
assert_eq(0, start->pT1->end_position.col);
|
assert_eq(1, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->position.row);
|
assert_eq(1, start->position.row);
|
||||||
assert_eq(0, start->position.col);
|
assert_eq(1, start->position.col);
|
||||||
assert_eq(2, start->end_position.row);
|
assert_eq(3, start->end_position.row);
|
||||||
assert_eq(0, start->end_position.col);
|
assert_eq(1, start->end_position.col);
|
||||||
|
|
||||||
input = "a";
|
input = "a";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start->pT1->pToken->position.row);
|
assert_eq(1, start->pT1->pToken->position.row);
|
||||||
assert_eq(0, start->pT1->pToken->position.col);
|
assert_eq(1, start->pT1->pToken->position.col);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.row);
|
assert_eq(1, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.col);
|
assert_eq(1, start->pT1->pToken->end_position.col);
|
||||||
assert(!p_position_valid(start->pT1->pA->position));
|
assert(!p_position_valid(start->pT1->pA->position));
|
||||||
assert_eq(0, start->pT1->position.row);
|
assert_eq(1, start->pT1->position.row);
|
||||||
assert_eq(0, start->pT1->position.col);
|
assert_eq(1, start->pT1->position.col);
|
||||||
assert_eq(0, start->pT1->end_position.row);
|
assert_eq(1, start->pT1->end_position.row);
|
||||||
assert_eq(0, start->pT1->end_position.col);
|
assert_eq(1, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->position.row);
|
assert_eq(1, start->position.row);
|
||||||
assert_eq(0, start->position.col);
|
assert_eq(1, start->position.col);
|
||||||
assert_eq(0, start->end_position.row);
|
assert_eq(1, start->end_position.row);
|
||||||
assert_eq(0, start->end_position.col);
|
assert_eq(1, start->end_position.col);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,90 +15,90 @@ unittest
|
|||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
Start * start = p_result(&context);
|
Start * start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(1, start.pT1.pToken.position.row);
|
assert_eq(2, start.pT1.pToken.position.row);
|
||||||
assert_eq(0, start.pT1.pToken.position.col);
|
assert_eq(1, start.pT1.pToken.position.col);
|
||||||
assert_eq(1, start.pT1.pToken.end_position.row);
|
assert_eq(2, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.col);
|
assert_eq(1, start.pT1.pToken.end_position.col);
|
||||||
assert(start.pT1.pA.position.valid);
|
assert(start.pT1.pA.position.valid);
|
||||||
assert_eq(2, start.pT1.pA.position.row);
|
assert_eq(3, start.pT1.pA.position.row);
|
||||||
assert_eq(2, start.pT1.pA.position.col);
|
assert_eq(3, start.pT1.pA.position.col);
|
||||||
assert_eq(2, start.pT1.pA.end_position.row);
|
assert_eq(3, start.pT1.pA.end_position.row);
|
||||||
assert_eq(7, start.pT1.pA.end_position.col);
|
assert_eq(8, start.pT1.pA.end_position.col);
|
||||||
assert_eq(1, start.pT1.position.row);
|
assert_eq(2, start.pT1.position.row);
|
||||||
assert_eq(0, start.pT1.position.col);
|
assert_eq(1, start.pT1.position.col);
|
||||||
assert_eq(2, start.pT1.end_position.row);
|
assert_eq(3, start.pT1.end_position.row);
|
||||||
assert_eq(7, start.pT1.end_position.col);
|
assert_eq(8, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(1, start.position.row);
|
assert_eq(2, start.position.row);
|
||||||
assert_eq(0, start.position.col);
|
assert_eq(1, start.position.col);
|
||||||
assert_eq(2, start.end_position.row);
|
assert_eq(3, start.end_position.row);
|
||||||
assert_eq(7, start.end_position.col);
|
assert_eq(8, start.end_position.col);
|
||||||
|
|
||||||
input = "a\nbb";
|
input = "a\nbb";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start.pT1.pToken.position.row);
|
assert_eq(1, start.pT1.pToken.position.row);
|
||||||
assert_eq(0, start.pT1.pToken.position.col);
|
assert_eq(1, start.pT1.pToken.position.col);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.row);
|
assert_eq(1, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.col);
|
assert_eq(1, start.pT1.pToken.end_position.col);
|
||||||
assert(start.pT1.pA.position.valid);
|
assert(start.pT1.pA.position.valid);
|
||||||
assert_eq(1, start.pT1.pA.position.row);
|
assert_eq(2, start.pT1.pA.position.row);
|
||||||
assert_eq(0, start.pT1.pA.position.col);
|
assert_eq(1, start.pT1.pA.position.col);
|
||||||
assert_eq(1, start.pT1.pA.end_position.row);
|
assert_eq(2, start.pT1.pA.end_position.row);
|
||||||
assert_eq(1, start.pT1.pA.end_position.col);
|
assert_eq(2, start.pT1.pA.end_position.col);
|
||||||
assert_eq(0, start.pT1.position.row);
|
assert_eq(1, start.pT1.position.row);
|
||||||
assert_eq(0, start.pT1.position.col);
|
assert_eq(1, start.pT1.position.col);
|
||||||
assert_eq(1, start.pT1.end_position.row);
|
assert_eq(2, start.pT1.end_position.row);
|
||||||
assert_eq(1, start.pT1.end_position.col);
|
assert_eq(2, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.position.row);
|
assert_eq(1, start.position.row);
|
||||||
assert_eq(0, start.position.col);
|
assert_eq(1, start.position.col);
|
||||||
assert_eq(1, start.end_position.row);
|
assert_eq(2, start.end_position.row);
|
||||||
assert_eq(1, start.end_position.col);
|
assert_eq(2, start.end_position.col);
|
||||||
|
|
||||||
input = "a\nc\nc";
|
input = "a\nc\nc";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start.pT1.pToken.position.row);
|
assert_eq(1, start.pT1.pToken.position.row);
|
||||||
assert_eq(0, start.pT1.pToken.position.col);
|
assert_eq(1, start.pT1.pToken.position.col);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.row);
|
assert_eq(1, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.col);
|
assert_eq(1, start.pT1.pToken.end_position.col);
|
||||||
assert(start.pT1.pA.position.valid);
|
assert(start.pT1.pA.position.valid);
|
||||||
assert_eq(1, start.pT1.pA.position.row);
|
assert_eq(2, start.pT1.pA.position.row);
|
||||||
assert_eq(0, start.pT1.pA.position.col);
|
assert_eq(1, start.pT1.pA.position.col);
|
||||||
assert_eq(2, start.pT1.pA.end_position.row);
|
assert_eq(3, start.pT1.pA.end_position.row);
|
||||||
assert_eq(0, start.pT1.pA.end_position.col);
|
assert_eq(1, start.pT1.pA.end_position.col);
|
||||||
assert_eq(0, start.pT1.position.row);
|
assert_eq(1, start.pT1.position.row);
|
||||||
assert_eq(0, start.pT1.position.col);
|
assert_eq(1, start.pT1.position.col);
|
||||||
assert_eq(2, start.pT1.end_position.row);
|
assert_eq(3, start.pT1.end_position.row);
|
||||||
assert_eq(0, start.pT1.end_position.col);
|
assert_eq(1, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.position.row);
|
assert_eq(1, start.position.row);
|
||||||
assert_eq(0, start.position.col);
|
assert_eq(1, start.position.col);
|
||||||
assert_eq(2, start.end_position.row);
|
assert_eq(3, start.end_position.row);
|
||||||
assert_eq(0, start.end_position.col);
|
assert_eq(1, start.end_position.col);
|
||||||
|
|
||||||
input = "a";
|
input = "a";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start.pT1.pToken.position.row);
|
assert_eq(1, start.pT1.pToken.position.row);
|
||||||
assert_eq(0, start.pT1.pToken.position.col);
|
assert_eq(1, start.pT1.pToken.position.col);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.row);
|
assert_eq(1, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.col);
|
assert_eq(1, start.pT1.pToken.end_position.col);
|
||||||
assert(!start.pT1.pA.position.valid);
|
assert(!start.pT1.pA.position.valid);
|
||||||
assert_eq(0, start.pT1.position.row);
|
assert_eq(1, start.pT1.position.row);
|
||||||
assert_eq(0, start.pT1.position.col);
|
assert_eq(1, start.pT1.position.col);
|
||||||
assert_eq(0, start.pT1.end_position.row);
|
assert_eq(1, start.pT1.end_position.row);
|
||||||
assert_eq(0, start.pT1.end_position.col);
|
assert_eq(1, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.position.row);
|
assert_eq(1, start.position.row);
|
||||||
assert_eq(0, start.position.col);
|
assert_eq(1, start.position.col);
|
||||||
assert_eq(0, start.end_position.row);
|
assert_eq(1, start.end_position.row);
|
||||||
assert_eq(0, start.end_position.col);
|
assert_eq(1, start.end_position.col);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,74 +11,74 @@ int main()
|
|||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
Start * start = p_result(&context);
|
Start * start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start->pT1->pToken->position.row);
|
assert_eq(1, start->pT1->pToken->position.row);
|
||||||
assert_eq(0, start->pT1->pToken->position.col);
|
assert_eq(1, start->pT1->pToken->position.col);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.row);
|
assert_eq(1, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(0, start->pT1->pToken->end_position.col);
|
assert_eq(1, start->pT1->pToken->end_position.col);
|
||||||
assert_eq(0, start->pT1->position.row);
|
assert_eq(1, start->pT1->position.row);
|
||||||
assert_eq(0, start->pT1->position.col);
|
assert_eq(1, start->pT1->position.col);
|
||||||
assert_eq(0, start->pT1->end_position.row);
|
assert_eq(1, start->pT1->end_position.row);
|
||||||
assert_eq(0, start->pT1->end_position.col);
|
assert_eq(1, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->pT2->pToken->position.row);
|
assert_eq(1, start->pT2->pToken->position.row);
|
||||||
assert_eq(1, start->pT2->pToken->position.col);
|
assert_eq(2, start->pT2->pToken->position.col);
|
||||||
assert_eq(0, start->pT2->pToken->end_position.row);
|
assert_eq(1, start->pT2->pToken->end_position.row);
|
||||||
assert_eq(2, start->pT2->pToken->end_position.col);
|
assert_eq(3, start->pT2->pToken->end_position.col);
|
||||||
assert_eq(0, start->pT2->position.row);
|
assert_eq(1, start->pT2->position.row);
|
||||||
assert_eq(1, start->pT2->position.col);
|
assert_eq(2, start->pT2->position.col);
|
||||||
assert_eq(0, start->pT2->end_position.row);
|
assert_eq(1, start->pT2->end_position.row);
|
||||||
assert_eq(2, start->pT2->end_position.col);
|
assert_eq(3, start->pT2->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->pT3->pToken->position.row);
|
assert_eq(1, start->pT3->pToken->position.row);
|
||||||
assert_eq(3, start->pT3->pToken->position.col);
|
assert_eq(4, start->pT3->pToken->position.col);
|
||||||
assert_eq(0, start->pT3->pToken->end_position.row);
|
assert_eq(1, start->pT3->pToken->end_position.row);
|
||||||
assert_eq(5, start->pT3->pToken->end_position.col);
|
assert_eq(6, start->pT3->pToken->end_position.col);
|
||||||
assert_eq(0, start->pT3->position.row);
|
assert_eq(1, start->pT3->position.row);
|
||||||
assert_eq(3, start->pT3->position.col);
|
assert_eq(4, start->pT3->position.col);
|
||||||
assert_eq(0, start->pT3->end_position.row);
|
assert_eq(1, start->pT3->end_position.row);
|
||||||
assert_eq(5, start->pT3->end_position.col);
|
assert_eq(6, start->pT3->end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start->position.row);
|
assert_eq(1, start->position.row);
|
||||||
assert_eq(0, start->position.col);
|
assert_eq(1, start->position.col);
|
||||||
assert_eq(0, start->end_position.row);
|
assert_eq(1, start->end_position.row);
|
||||||
assert_eq(5, start->end_position.col);
|
assert_eq(6, start->end_position.col);
|
||||||
|
|
||||||
input = "\n\n bb\nc\ncc\n\n a";
|
input = "\n\n bb\nc\ncc\n\n a";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(2, start->pT1->pToken->position.row);
|
assert_eq(3, start->pT1->pToken->position.row);
|
||||||
assert_eq(2, start->pT1->pToken->position.col);
|
assert_eq(3, start->pT1->pToken->position.col);
|
||||||
assert_eq(2, start->pT1->pToken->end_position.row);
|
assert_eq(3, start->pT1->pToken->end_position.row);
|
||||||
assert_eq(3, start->pT1->pToken->end_position.col);
|
assert_eq(4, start->pT1->pToken->end_position.col);
|
||||||
assert_eq(2, start->pT1->position.row);
|
assert_eq(3, start->pT1->position.row);
|
||||||
assert_eq(2, start->pT1->position.col);
|
assert_eq(3, start->pT1->position.col);
|
||||||
assert_eq(2, start->pT1->end_position.row);
|
assert_eq(3, start->pT1->end_position.row);
|
||||||
assert_eq(3, start->pT1->end_position.col);
|
assert_eq(4, start->pT1->end_position.col);
|
||||||
|
|
||||||
assert_eq(3, start->pT2->pToken->position.row);
|
assert_eq(4, start->pT2->pToken->position.row);
|
||||||
assert_eq(0, start->pT2->pToken->position.col);
|
assert_eq(1, start->pT2->pToken->position.col);
|
||||||
assert_eq(4, start->pT2->pToken->end_position.row);
|
assert_eq(5, start->pT2->pToken->end_position.row);
|
||||||
assert_eq(1, start->pT2->pToken->end_position.col);
|
assert_eq(2, start->pT2->pToken->end_position.col);
|
||||||
assert_eq(3, start->pT2->position.row);
|
assert_eq(4, start->pT2->position.row);
|
||||||
assert_eq(0, start->pT2->position.col);
|
assert_eq(1, start->pT2->position.col);
|
||||||
assert_eq(4, start->pT2->end_position.row);
|
assert_eq(5, start->pT2->end_position.row);
|
||||||
assert_eq(1, start->pT2->end_position.col);
|
assert_eq(2, start->pT2->end_position.col);
|
||||||
|
|
||||||
assert_eq(6, start->pT3->pToken->position.row);
|
assert_eq(7, start->pT3->pToken->position.row);
|
||||||
assert_eq(5, start->pT3->pToken->position.col);
|
assert_eq(6, start->pT3->pToken->position.col);
|
||||||
assert_eq(6, start->pT3->pToken->end_position.row);
|
assert_eq(7, start->pT3->pToken->end_position.row);
|
||||||
assert_eq(5, start->pT3->pToken->end_position.col);
|
assert_eq(6, start->pT3->pToken->end_position.col);
|
||||||
assert_eq(6, start->pT3->position.row);
|
assert_eq(7, start->pT3->position.row);
|
||||||
assert_eq(5, start->pT3->position.col);
|
assert_eq(6, start->pT3->position.col);
|
||||||
assert_eq(6, start->pT3->end_position.row);
|
assert_eq(7, start->pT3->end_position.row);
|
||||||
assert_eq(5, start->pT3->end_position.col);
|
assert_eq(6, start->pT3->end_position.col);
|
||||||
|
|
||||||
assert_eq(2, start->position.row);
|
assert_eq(3, start->position.row);
|
||||||
assert_eq(2, start->position.col);
|
assert_eq(3, start->position.col);
|
||||||
assert_eq(6, start->end_position.row);
|
assert_eq(7, start->end_position.row);
|
||||||
assert_eq(5, start->end_position.col);
|
assert_eq(6, start->end_position.col);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,72 +15,72 @@ unittest
|
|||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
Start * start = p_result(&context);
|
Start * start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(0, start.pT1.pToken.position.row);
|
assert_eq(1, start.pT1.pToken.position.row);
|
||||||
assert_eq(0, start.pT1.pToken.position.col);
|
assert_eq(1, start.pT1.pToken.position.col);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.row);
|
assert_eq(1, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(0, start.pT1.pToken.end_position.col);
|
assert_eq(1, start.pT1.pToken.end_position.col);
|
||||||
assert_eq(0, start.pT1.position.row);
|
assert_eq(1, start.pT1.position.row);
|
||||||
assert_eq(0, start.pT1.position.col);
|
assert_eq(1, start.pT1.position.col);
|
||||||
assert_eq(0, start.pT1.end_position.row);
|
assert_eq(1, start.pT1.end_position.row);
|
||||||
assert_eq(0, start.pT1.end_position.col);
|
assert_eq(1, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.pT2.pToken.position.row);
|
assert_eq(1, start.pT2.pToken.position.row);
|
||||||
assert_eq(1, start.pT2.pToken.position.col);
|
assert_eq(2, start.pT2.pToken.position.col);
|
||||||
assert_eq(0, start.pT2.pToken.end_position.row);
|
assert_eq(1, start.pT2.pToken.end_position.row);
|
||||||
assert_eq(2, start.pT2.pToken.end_position.col);
|
assert_eq(3, start.pT2.pToken.end_position.col);
|
||||||
assert_eq(0, start.pT2.position.row);
|
assert_eq(1, start.pT2.position.row);
|
||||||
assert_eq(1, start.pT2.position.col);
|
assert_eq(2, start.pT2.position.col);
|
||||||
assert_eq(0, start.pT2.end_position.row);
|
assert_eq(1, start.pT2.end_position.row);
|
||||||
assert_eq(2, start.pT2.end_position.col);
|
assert_eq(3, start.pT2.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.pT3.pToken.position.row);
|
assert_eq(1, start.pT3.pToken.position.row);
|
||||||
assert_eq(3, start.pT3.pToken.position.col);
|
assert_eq(4, start.pT3.pToken.position.col);
|
||||||
assert_eq(0, start.pT3.pToken.end_position.row);
|
assert_eq(1, start.pT3.pToken.end_position.row);
|
||||||
assert_eq(5, start.pT3.pToken.end_position.col);
|
assert_eq(6, start.pT3.pToken.end_position.col);
|
||||||
assert_eq(0, start.pT3.position.row);
|
assert_eq(1, start.pT3.position.row);
|
||||||
assert_eq(3, start.pT3.position.col);
|
assert_eq(4, start.pT3.position.col);
|
||||||
assert_eq(0, start.pT3.end_position.row);
|
assert_eq(1, start.pT3.end_position.row);
|
||||||
assert_eq(5, start.pT3.end_position.col);
|
assert_eq(6, start.pT3.end_position.col);
|
||||||
|
|
||||||
assert_eq(0, start.position.row);
|
assert_eq(1, start.position.row);
|
||||||
assert_eq(0, start.position.col);
|
assert_eq(1, start.position.col);
|
||||||
assert_eq(0, start.end_position.row);
|
assert_eq(1, start.end_position.row);
|
||||||
assert_eq(5, start.end_position.col);
|
assert_eq(6, start.end_position.col);
|
||||||
|
|
||||||
input = "\n\n bb\nc\ncc\n\n a";
|
input = "\n\n bb\nc\ncc\n\n a";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_SUCCESS);
|
assert(p_parse(&context) == P_SUCCESS);
|
||||||
start = p_result(&context);
|
start = p_result(&context);
|
||||||
|
|
||||||
assert_eq(2, start.pT1.pToken.position.row);
|
assert_eq(3, start.pT1.pToken.position.row);
|
||||||
assert_eq(2, start.pT1.pToken.position.col);
|
assert_eq(3, start.pT1.pToken.position.col);
|
||||||
assert_eq(2, start.pT1.pToken.end_position.row);
|
assert_eq(3, start.pT1.pToken.end_position.row);
|
||||||
assert_eq(3, start.pT1.pToken.end_position.col);
|
assert_eq(4, start.pT1.pToken.end_position.col);
|
||||||
assert_eq(2, start.pT1.position.row);
|
assert_eq(3, start.pT1.position.row);
|
||||||
assert_eq(2, start.pT1.position.col);
|
assert_eq(3, start.pT1.position.col);
|
||||||
assert_eq(2, start.pT1.end_position.row);
|
assert_eq(3, start.pT1.end_position.row);
|
||||||
assert_eq(3, start.pT1.end_position.col);
|
assert_eq(4, start.pT1.end_position.col);
|
||||||
|
|
||||||
assert_eq(3, start.pT2.pToken.position.row);
|
assert_eq(4, start.pT2.pToken.position.row);
|
||||||
assert_eq(0, start.pT2.pToken.position.col);
|
assert_eq(1, start.pT2.pToken.position.col);
|
||||||
assert_eq(4, start.pT2.pToken.end_position.row);
|
assert_eq(5, start.pT2.pToken.end_position.row);
|
||||||
assert_eq(1, start.pT2.pToken.end_position.col);
|
assert_eq(2, start.pT2.pToken.end_position.col);
|
||||||
assert_eq(3, start.pT2.position.row);
|
assert_eq(4, start.pT2.position.row);
|
||||||
assert_eq(0, start.pT2.position.col);
|
assert_eq(1, start.pT2.position.col);
|
||||||
assert_eq(4, start.pT2.end_position.row);
|
assert_eq(5, start.pT2.end_position.row);
|
||||||
assert_eq(1, start.pT2.end_position.col);
|
assert_eq(2, start.pT2.end_position.col);
|
||||||
|
|
||||||
assert_eq(6, start.pT3.pToken.position.row);
|
assert_eq(7, start.pT3.pToken.position.row);
|
||||||
assert_eq(5, start.pT3.pToken.position.col);
|
assert_eq(6, start.pT3.pToken.position.col);
|
||||||
assert_eq(6, start.pT3.pToken.end_position.row);
|
assert_eq(7, start.pT3.pToken.end_position.row);
|
||||||
assert_eq(5, start.pT3.pToken.end_position.col);
|
assert_eq(6, start.pT3.pToken.end_position.col);
|
||||||
assert_eq(6, start.pT3.position.row);
|
assert_eq(7, start.pT3.position.row);
|
||||||
assert_eq(5, start.pT3.position.col);
|
assert_eq(6, start.pT3.position.col);
|
||||||
assert_eq(6, start.pT3.end_position.row);
|
assert_eq(7, start.pT3.end_position.row);
|
||||||
assert_eq(5, start.pT3.end_position.col);
|
assert_eq(6, start.pT3.end_position.col);
|
||||||
|
|
||||||
assert_eq(2, start.position.row);
|
assert_eq(3, start.position.row);
|
||||||
assert_eq(2, start.position.col);
|
assert_eq(3, start.position.col);
|
||||||
assert_eq(6, start.end_position.row);
|
assert_eq(7, start.end_position.row);
|
||||||
assert_eq(5, start.end_position.col);
|
assert_eq(6, start.end_position.col);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,28 +12,28 @@ int main()
|
|||||||
input = "a\n123\na a";
|
input = "a\n123\na a";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context).row == 2);
|
assert(p_position(&context).row == 3);
|
||||||
assert(p_position(&context).col == 3);
|
assert(p_position(&context).col == 4);
|
||||||
assert(p_token(&context) == TOKEN_a);
|
assert(p_token(&context) == TOKEN_a);
|
||||||
|
|
||||||
input = "12";
|
input = "12";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context).row == 0);
|
assert(p_position(&context).row == 1);
|
||||||
assert(p_position(&context).col == 0);
|
assert(p_position(&context).col == 1);
|
||||||
assert(p_token(&context) == TOKEN_num);
|
assert(p_token(&context) == TOKEN_num);
|
||||||
|
|
||||||
input = "a 12\n\nab";
|
input = "a 12\n\nab";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_INPUT);
|
assert(p_parse(&context) == P_UNEXPECTED_INPUT);
|
||||||
assert(p_position(&context).row == 2);
|
assert(p_position(&context).row == 3);
|
||||||
assert(p_position(&context).col == 1);
|
assert(p_position(&context).col == 2);
|
||||||
|
|
||||||
input = "a 12\n\na\n\n77\na \xAA";
|
input = "a 12\n\na\n\n77\na \xAA";
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_DECODE_ERROR);
|
assert(p_parse(&context) == P_DECODE_ERROR);
|
||||||
assert(p_position(&context).row == 5);
|
assert(p_position(&context).row == 6);
|
||||||
assert(p_position(&context).col == 4);
|
assert(p_position(&context).col == 5);
|
||||||
|
|
||||||
assert(strcmp(p_token_names[TOKEN_a], "a") == 0);
|
assert(strcmp(p_token_names[TOKEN_a], "a") == 0);
|
||||||
assert(strcmp(p_token_names[TOKEN_num], "num") == 0);
|
assert(strcmp(p_token_names[TOKEN_num], "num") == 0);
|
||||||
|
|||||||
@ -16,24 +16,24 @@ unittest
|
|||||||
input = "a\n123\na a";
|
input = "a\n123\na a";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context) == p_position_t(2, 3));
|
assert(p_position(&context) == p_position_t(3, 4));
|
||||||
assert(p_token(&context) == TOKEN_a);
|
assert(p_token(&context) == TOKEN_a);
|
||||||
|
|
||||||
input = "12";
|
input = "12";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context) == p_position_t(0, 0));
|
assert(p_position(&context) == p_position_t(1, 1));
|
||||||
assert(p_token(&context) == TOKEN_num);
|
assert(p_token(&context) == TOKEN_num);
|
||||||
|
|
||||||
input = "a 12\n\nab";
|
input = "a 12\n\nab";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_INPUT);
|
assert(p_parse(&context) == P_UNEXPECTED_INPUT);
|
||||||
assert(p_position(&context) == p_position_t(2, 1));
|
assert(p_position(&context) == p_position_t(3, 2));
|
||||||
|
|
||||||
input = "a 12\n\na\n\n77\na \xAA";
|
input = "a 12\n\na\n\n77\na \xAA";
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_DECODE_ERROR);
|
assert(p_parse(&context) == P_DECODE_ERROR);
|
||||||
assert(p_position(&context) == p_position_t(5, 4));
|
assert(p_position(&context) == p_position_t(6, 5));
|
||||||
|
|
||||||
assert(p_token_names[TOKEN_a] == "a");
|
assert(p_token_names[TOKEN_a] == "a");
|
||||||
assert(p_token_names[TOKEN_num] == "num");
|
assert(p_token_names[TOKEN_num] == "num");
|
||||||
|
|||||||
@ -41,68 +41,68 @@ int main()
|
|||||||
p_context_t context;
|
p_context_t context;
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 0u);
|
assert(token_info.position.row == 1u);
|
||||||
assert(token_info.position.col == 0u);
|
assert(token_info.position.col == 1u);
|
||||||
assert(token_info.end_position.row == 0u);
|
assert(token_info.end_position.row == 1u);
|
||||||
assert(token_info.end_position.col == 0u);
|
assert(token_info.end_position.col == 1u);
|
||||||
assert(token_info.length == 1u);
|
assert(token_info.length == 1u);
|
||||||
assert(token_info.token == TOKEN_int);
|
assert(token_info.token == TOKEN_int);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 0u);
|
assert(token_info.position.row == 1u);
|
||||||
assert(token_info.position.col == 2u);
|
assert(token_info.position.col == 3u);
|
||||||
assert(token_info.end_position.row == 0u);
|
assert(token_info.end_position.row == 1u);
|
||||||
assert(token_info.end_position.col == 2u);
|
assert(token_info.end_position.col == 3u);
|
||||||
assert(token_info.length == 1u);
|
assert(token_info.length == 1u);
|
||||||
assert(token_info.token == TOKEN_plus);
|
assert(token_info.token == TOKEN_plus);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 0u);
|
assert(token_info.position.row == 1u);
|
||||||
assert(token_info.position.col == 4u);
|
assert(token_info.position.col == 5u);
|
||||||
assert(token_info.end_position.row == 0u);
|
assert(token_info.end_position.row == 1u);
|
||||||
assert(token_info.end_position.col == 4u);
|
assert(token_info.end_position.col == 5u);
|
||||||
assert(token_info.length == 1u);
|
assert(token_info.length == 1u);
|
||||||
assert(token_info.token == TOKEN_int);
|
assert(token_info.token == TOKEN_int);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 0u);
|
assert(token_info.position.row == 1u);
|
||||||
assert(token_info.position.col == 6u);
|
assert(token_info.position.col == 7u);
|
||||||
assert(token_info.end_position.row == 0u);
|
assert(token_info.end_position.row == 1u);
|
||||||
assert(token_info.end_position.col == 6u);
|
assert(token_info.end_position.col == 7u);
|
||||||
assert(token_info.length == 1u);
|
assert(token_info.length == 1u);
|
||||||
assert(token_info.token == TOKEN_times);
|
assert(token_info.token == TOKEN_times);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 1u);
|
assert(token_info.position.row == 2u);
|
||||||
assert(token_info.position.col == 0u);
|
assert(token_info.position.col == 1u);
|
||||||
assert(token_info.end_position.row == 1u);
|
assert(token_info.end_position.row == 2u);
|
||||||
assert(token_info.end_position.col == 2u);
|
assert(token_info.end_position.col == 3u);
|
||||||
assert(token_info.length == 3u);
|
assert(token_info.length == 3u);
|
||||||
assert(token_info.token == TOKEN_int);
|
assert(token_info.token == TOKEN_int);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 1u);
|
assert(token_info.position.row == 2u);
|
||||||
assert(token_info.position.col == 4u);
|
assert(token_info.position.col == 5u);
|
||||||
assert(token_info.end_position.row == 1u);
|
assert(token_info.end_position.row == 2u);
|
||||||
assert(token_info.end_position.col == 4u);
|
assert(token_info.end_position.col == 5u);
|
||||||
assert(token_info.length == 1u);
|
assert(token_info.length == 1u);
|
||||||
assert(token_info.token == TOKEN_plus);
|
assert(token_info.token == TOKEN_plus);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 1u);
|
assert(token_info.position.row == 2u);
|
||||||
assert(token_info.position.col == 6u);
|
assert(token_info.position.col == 7u);
|
||||||
assert(token_info.end_position.row == 1u);
|
assert(token_info.end_position.row == 2u);
|
||||||
assert(token_info.end_position.col == 8u);
|
assert(token_info.end_position.col == 9u);
|
||||||
assert(token_info.length == 3u);
|
assert(token_info.length == 3u);
|
||||||
assert(token_info.token == TOKEN_int);
|
assert(token_info.token == TOKEN_int);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 1u);
|
assert(token_info.position.row == 2u);
|
||||||
assert(token_info.position.col == 9u);
|
assert(token_info.position.col == 10u);
|
||||||
assert(token_info.end_position.row == 1u);
|
assert(token_info.end_position.row == 2u);
|
||||||
assert(token_info.end_position.col == 9u);
|
assert(token_info.end_position.col == 10u);
|
||||||
assert(token_info.length == 0u);
|
assert(token_info.length == 0u);
|
||||||
assert(token_info.token == TOKEN___EOF);
|
assert(token_info.token == TOKEN___EOF);
|
||||||
|
|
||||||
p_context_init(&context, (uint8_t const *)"", 0u);
|
p_context_init(&context, (uint8_t const *)"", 0u);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info.position.row == 0u);
|
assert(token_info.position.row == 1u);
|
||||||
assert(token_info.position.col == 0u);
|
assert(token_info.position.col == 1u);
|
||||||
assert(token_info.end_position.row == 0u);
|
assert(token_info.end_position.row == 1u);
|
||||||
assert(token_info.end_position.col == 0u);
|
assert(token_info.end_position.col == 1u);
|
||||||
assert(token_info.length == 0u);
|
assert(token_info.length == 0u);
|
||||||
assert(token_info.token == TOKEN___EOF);
|
assert(token_info.token == TOKEN___EOF);
|
||||||
|
|
||||||
|
|||||||
@ -47,23 +47,23 @@ unittest
|
|||||||
p_context_t context;
|
p_context_t context;
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(0, 0), p_position_t(0, 0), 1, TOKEN_int));
|
assert(token_info == p_token_info_t(p_position_t(1, 1), p_position_t(1, 1), 1, TOKEN_int));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(0, 2), p_position_t(0, 2), 1, TOKEN_plus));
|
assert(token_info == p_token_info_t(p_position_t(1, 3), p_position_t(1, 3), 1, TOKEN_plus));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(0, 4), p_position_t(0, 4), 1, TOKEN_int));
|
assert(token_info == p_token_info_t(p_position_t(1, 5), p_position_t(1, 5), 1, TOKEN_int));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(0, 6), p_position_t(0, 6), 1, TOKEN_times));
|
assert(token_info == p_token_info_t(p_position_t(1, 7), p_position_t(1, 7), 1, TOKEN_times));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(1, 0), p_position_t(1, 2), 3, TOKEN_int));
|
assert(token_info == p_token_info_t(p_position_t(2, 1), p_position_t(2, 3), 3, TOKEN_int));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(1, 4), p_position_t(1, 4), 1, TOKEN_plus));
|
assert(token_info == p_token_info_t(p_position_t(2, 5), p_position_t(2, 5), 1, TOKEN_plus));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(1, 6), p_position_t(1, 8), 3, TOKEN_int));
|
assert(token_info == p_token_info_t(p_position_t(2, 7), p_position_t(2, 9), 3, TOKEN_int));
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(1, 9), p_position_t(1, 9), 0, TOKEN___EOF));
|
assert(token_info == p_token_info_t(p_position_t(2, 10), p_position_t(2, 10), 0, TOKEN___EOF));
|
||||||
|
|
||||||
p_context_init(&context, "");
|
p_context_init(&context, "");
|
||||||
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
assert(p_lex(&context, &token_info) == P_SUCCESS);
|
||||||
assert(token_info == p_token_info_t(p_position_t(0, 0), p_position_t(0, 0), 0, TOKEN___EOF));
|
assert(token_info == p_token_info_t(p_position_t(1, 1), p_position_t(1, 1), 0, TOKEN___EOF));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,8 +8,8 @@ int main()
|
|||||||
p_context_t context;
|
p_context_t context;
|
||||||
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
p_context_init(&context, (uint8_t const *)input, strlen(input));
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context).row == 0);
|
assert(p_position(&context).row == 1);
|
||||||
assert(p_position(&context).col == 1);
|
assert(p_position(&context).col == 2);
|
||||||
assert(context.token == TOKEN___EOF);
|
assert(context.token == TOKEN___EOF);
|
||||||
|
|
||||||
input = "a b";
|
input = "a b";
|
||||||
|
|||||||
@ -12,7 +12,7 @@ unittest
|
|||||||
p_context_t context;
|
p_context_t context;
|
||||||
p_context_init(&context, input);
|
p_context_init(&context, input);
|
||||||
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
assert(p_parse(&context) == P_UNEXPECTED_TOKEN);
|
||||||
assert(p_position(&context) == p_position_t(0, 1));
|
assert(p_position(&context) == p_position_t(1, 2));
|
||||||
assert(context.token == TOKEN___EOF);
|
assert(context.token == TOKEN___EOF);
|
||||||
|
|
||||||
input = "a b";
|
input = "a b";
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user