aboutsummaryrefslogtreecommitdiff
path: root/source/lexer.elna
diff options
context:
space:
mode:
Diffstat (limited to 'source/lexer.elna')
-rw-r--r--source/lexer.elna29
1 files changed, 17 insertions, 12 deletions
diff --git a/source/lexer.elna b/source/lexer.elna
index 83e89df..1cfe097 100644
--- a/source/lexer.elna
+++ b/source/lexer.elna
@@ -135,6 +135,7 @@ type
_case,
_do,
_of,
+ arrow,
eof
)
(**
@@ -313,7 +314,7 @@ begin
end
return
-proc elna_lexer_get_transition(current_state: ElnaLexerState; character_class: ElnaLexerClass): ^ElnaLexerTransition
+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)]
@@ -523,7 +524,7 @@ begin
end
return
-proc elna_lexer_token_create(kind: ElnaLexerKind; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_token_create(kind: ElnaLexerKind; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
begin
@@ -532,7 +533,7 @@ begin
result^.position := position^
return result
-proc elna_lexer_classify_keyword(position_start, position_end: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_keyword(position_start, position_end: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
result_length: Word
@@ -587,7 +588,7 @@ begin
end
return result
-proc elna_lexer_classify_delimited(start_position, end_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_delimited(start_position, end_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
delimiter: Word8
result: ^ElnaLexerToken
@@ -604,7 +605,7 @@ begin
result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
-proc elna_lexer_classify_integer(start_position, end_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_integer(start_position, end_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
result: ^ElnaLexerToken
begin
@@ -612,7 +613,7 @@ begin
result^.start := start_position[1 to cast(end_position - start_position: Word)]
return result
-proc elna_lexer_classify_finalize(start_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_finalize(start_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
character: Word8
result: ^ElnaLexerToken
@@ -634,7 +635,7 @@ begin
end
return result
-proc elna_lexer_classify_single(start_position: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_single(start_position: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
character: Word8
result: ^ElnaLexerToken
@@ -675,7 +676,7 @@ begin
end
return result
-proc elna_lexer_classify_composite(start_position, one_before_last: ^Word8; position: ^ElnaPosition): ^ElnaLexerToken
+proc elna_lexer_classify_composite(start_position, one_before_last: ^Word8; position: ^ElnaPosition) -> ^ElnaLexerToken
var
first_character: Word8
last_character: Word8
@@ -696,10 +697,14 @@ begin
if last_character = '=' then
result := elna_lexer_token_create(ElnaLexerKind.greater_equal, position)
end
+ elsif first_character = '-' then
+ if last_character = '>' then
+ result := elna_lexer_token_create(ElnaLexerKind.arrow, position)
+ end
end
return result
-proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: ElnaLexerAction): ^ElnaLexerToken
+proc elna_lexer_execute_action(cursor: ^ElnaLexerCursor; action_to_perform: ElnaLexerAction) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin
@@ -736,7 +741,7 @@ begin
end
return token
-proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_execute_transition(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
next_transition: ^ElnaLexerTransition
current_character: Word8
@@ -766,7 +771,7 @@ return
* Reads the next token and writes its type into the address in the kind parameter.
* Resets the lexer state for reading the next token.
*)
-proc elna_lexer_peek(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_peek(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin
@@ -783,7 +788,7 @@ return cursor^.token
(**
* Reads the token and advance the lexer.
*)
-proc elna_lexer_read(cursor: ^ElnaLexerCursor): ^ElnaLexerToken
+proc elna_lexer_read(cursor: ^ElnaLexerCursor) -> ^ElnaLexerToken
var
token: ^ElnaLexerToken
begin