aboutsummaryrefslogtreecommitdiff
path: root/source/lexer.elna
diff options
context:
space:
mode:
Diffstat (limited to 'source/lexer.elna')
-rw-r--r--source/lexer.elna90
1 files changed, 36 insertions, 54 deletions
diff --git a/source/lexer.elna b/source/lexer.elna
index 62ad3b1..63ca3d3 100644
--- a/source/lexer.elna
+++ b/source/lexer.elna
@@ -180,7 +180,7 @@ begin
classification[14] := ElnaLexerClass.space;
classification[33] := ElnaLexerClass.space;
classification[34] := ElnaLexerClass.single
-end
+return
proc elna_lexer_classifications2()
begin
@@ -214,7 +214,7 @@ begin
classification[62] := ElnaLexerClass.equals;
classification[63] := ElnaLexerClass.greater;
classification[64] := ElnaLexerClass.other
-end
+return
proc elna_lexer_classifications3()
begin
@@ -252,7 +252,7 @@ begin
classification[96] := ElnaLexerClass.alpha;
classification[97] := ElnaLexerClass.other;
classification[98] := ElnaLexerClass.hex
-end
+return
proc elna_lexer_classifications4()
begin
@@ -285,7 +285,7 @@ begin
classification[125] := ElnaLexerClass.single;
classification[126] := ElnaLexerClass.other;
classification[127] := ElnaLexerClass.single
-end
+return
(**
* Initializes the array with character classes.
@@ -312,14 +312,12 @@ begin
classification[code] := ElnaLexerClass.other;
code := code + 1u
end
-end
+return
proc elna_lexer_get_transition(current_state: ElnaLexerState; character_class: ElnaLexerClass): ^ElnaLexerTransition
(* Each state is 8 bytes long (2 words: action and next state).
There are 23 character classes, so a transition row 8 * 23 = 184 bytes long. *)
-
- return @transition_table[cast(current_state: Word)][cast(character_class: Word)]
-end
+return @transition_table[cast(current_state: Word)][cast(character_class: Word)]
(**
* Parameters:
@@ -337,7 +335,7 @@ begin
transition^.action := action;
transition^.next_state := next_state
-end
+return
(**
* Sets same action and state transition for all character classes in one transition row.
@@ -373,7 +371,7 @@ begin
elna_lexer_set_transition(current_state, ElnaLexerClass.less, default_action, next_state);
elna_lexer_set_transition(current_state, ElnaLexerClass.other, default_action, next_state);
elna_lexer_set_transition(current_state, ElnaLexerClass.number_sign, default_action, next_state)
-end
+return
(**
* The transition table describes transitions from one state to another, given
@@ -508,13 +506,13 @@ begin
elna_lexer_set_transition(ElnaLexerState.trait, ElnaLexerClass.hex, ElnaLexerAction.accumulate, ElnaLexerState.trait);
elna_lexer_set_transition(ElnaLexerState.trait, ElnaLexerClass.zero, ElnaLexerAction.accumulate, ElnaLexerState.trait);
elna_lexer_set_transition(ElnaLexerState.trait, ElnaLexerClass.x, ElnaLexerAction.accumulate, ElnaLexerState.trait)
-end
+return
proc elna_lexer_advance(cursor: ^ElnaLexerCursor)
begin
cursor^.finish := cursor^.finish + 1;
cursor^.position.end_location.column := cursor^.position.end_location.column + 1u
-end
+return
proc elna_lexer_classify_space(start_position: ^Char; location: ^ElnaLocation)
begin
@@ -524,7 +522,7 @@ begin
else
location^.column := location^.column + 1u
end
-end
+return
proc elna_lexer_token_create(kind: ElnaLexerKind; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -532,10 +530,8 @@ var
begin
result := malloc(#size(ElnaLexerToken));
result^.kind := kind;
- result^.position := position^;
-
- return result
-end
+ result^.position := position^
+return result
proc elna_lexer_classify_keyword(position_start, position_end: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -589,9 +585,8 @@ begin
result^.kind := ElnaLexerKind.boolean
elsif string_compare(position_start, result_length, "cast") then
result^.kind := ElnaLexerKind._cast
- end;
- return result
-end
+ end
+return result
proc elna_lexer_classify_delimited(start_position, end_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -607,20 +602,16 @@ begin
elsif delimiter = '"' then
result := elna_lexer_token_create(ElnaLexerKind.string, position)
end;
- result^.start := String(start_position, cast(end_position - start_position: Word));
-
- return result
-end
+ result^.start := String(start_position, cast(end_position - start_position: Word))
+return result
proc elna_lexer_classify_integer(start_position, end_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
result: ^ElnaLexerToken
begin
result := elna_lexer_token_create(ElnaLexerKind.integer, position);
- result^.start := String(start_position, cast(end_position - start_position: Word));
-
- return result
-end
+ result^.start := String(start_position, cast(end_position - start_position: Word))
+return result
proc elna_lexer_classify_finalize(start_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -641,9 +632,8 @@ begin
result := elna_lexer_token_create(ElnaLexerKind.less_than, position)
elsif character = '>' then
result := elna_lexer_token_create(ElnaLexerKind.greater_than, position)
- end;
- return result
-end
+ end
+return result
proc elna_lexer_classify_single(start_position: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -683,9 +673,8 @@ begin
result := elna_lexer_token_create(ElnaLexerKind.left_square, position)
elsif character = ']' then
result := elna_lexer_token_create(ElnaLexerKind.right_square, position)
- end;
- return result
-end
+ end
+return result
proc elna_lexer_classify_composite(start_position, one_before_last: ^Char; position: ^ElnaPosition): ^ElnaLexerToken
var
@@ -708,9 +697,8 @@ begin
if last_character = '=' then
result := elna_lexer_token_create(ElnaLexerKind.greater_equal, position)
end
- end;
- return result
-end
+ end
+return result
proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: ElnaLexerAction): ^ElnaLexerToken
var
@@ -746,9 +734,8 @@ begin
elna_lexer_advance(cursor);
token := elna_lexer_classify_delimited(cursor^.start, cursor^.finish, @cursor^.position)
- end;
- return token
-end
+ end
+return token
proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
var
@@ -758,10 +745,8 @@ begin
current_character := cursor^.finish^;
next_transition := elna_lexer_get_transition(cursor^.state,
classification[cast(current_character: Word) + 1u]);
- cursor^.state := next_transition^.next_state;
-
- return elna_lexer_execute_action(cursor, next_transition^.action)
-end
+ cursor^.state := next_transition^.next_state
+return elna_lexer_execute_action(cursor, next_transition^.action)
(**
* One time lexer initialization.
@@ -775,8 +760,8 @@ begin
cursor^.finish := code_pointer;
cursor^.token := nil;
cursor^.position.start_location := ElnaLocation(1u, 1u);
- cursor^.position.end_location := ElnaLocation(1u, 1u);
-end
+ cursor^.position.end_location := ElnaLocation(1u, 1u)
+return
(**
* Reads the next token and writes its type into the address in the kind parameter.
@@ -793,9 +778,8 @@ begin
token := elna_lexer_execute_transition(cursor)
end;
cursor^.token := token
- end;
- return cursor^.token
-end
+ end
+return cursor^.token
(**
* Reads the token and advance the lexer.
@@ -807,10 +791,8 @@ begin
token := elna_lexer_peek(cursor);
cursor^.token := nil;
cursor^.start := cursor^.finish;
- cursor^.position.start_location := cursor^.position.end_location;
-
- return token
-end
+ cursor^.position.start_location := cursor^.position.end_location
+return token
(**
* Skips comments.
@@ -825,6 +807,6 @@ begin
elna_lexer_read(cursor);
token := elna_lexer_peek(cursor)
end
-end
+return
end.