nightshade

The nightshade programming language, compiler and tools (WIP)
Log | Files | Refs

commit c5b32c931be8466429af81c16effea3ecea66ba2
parent 4e30b242e98097476132b2b00420109c36fd3544
Author: citbl <citbl@citbl.org>
Date:   Sun, 31 May 2026 18:58:23 +1000

make string

Diffstat:
Msrc/lexer.adb | 47+++++++++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 6 deletions(-)

diff --git a/src/lexer.adb b/src/lexer.adb @@ -75,24 +75,59 @@ package body Lexer is end loop; end Skip_Spaces_Comments; + function Make_String (L : in out Lexer) return Token is + C : Character; + T : Token; + Start : Natural; + begin + Start := L.Pos; + Nudge (L); -- advance `"` + + while true loop + C := Peek (L); + if C = '"' then + exit; + end if; + Nudge (L); + end loop; + + -- Put_Line("made string of " & Integer'Image(L.Pos-Start)); + -- Put_Line (L.Source (Start .. L.Pos)); + + T := + (Kind => Str_Literal, + Lexeme => To_Unbounded_String (L.Source (Start .. L.Pos)), + Line => 1, + Col => 1); + + Nudge (L); -- advance `"` + return T; + end Make_String; -- next token function Next_Token (L : in out Lexer) return Token is - T : Token; - TK : Token_Kind; + T : Token; + TK : Token_Kind; + Start : Natural; + C : Character; begin Skip_Spaces_Comments (L); + Put (Peek (L)); if L.Pos < L.Source'Length then TK := Unknown; else TK := EOF; end if; + Start := L.Pos; + C := Peek (L); + if C = '"' then + -- make string + T := Make_String (L); + return T; + end if; T := - (Kind => TK, - Lexeme => To_Unbounded_String (""), - Line => 1, - Col => 1); + (Kind => TK, Lexeme => To_Unbounded_String (""), Line => 1, Col => 1); Nudge (L); return T; end Next_Token;