11mod lexericals;
22use crate :: lexericals:: lexer:: Lexer ;
3+ use crate :: lexericals:: tokenizer:: { Token , Tokenkind } ;
34
45
56fn main ( ) {
@@ -11,7 +12,8 @@ fn main() {
1112 // println!("Token {:?}", token);
1213
1314 let input =r#"
14- let five = 5;
15+ let five = 5000000;
16+ let floattest = 5.0;
1517 let ten = 10;
1618 let add = fn(x, y) {
1719 x + y;
@@ -20,13 +22,15 @@ fn main() {
2022 "# ;
2123
2224 let mut lexer = Lexer :: new ( input) ;
23- println ! ( "Lexer initialized with input: {}" , input) ;
24- let mut tokens = Vec :: new ( ) ;
25- let mut token = lexer. next_token ( ) ;
26- while token. kind != lexericals:: tokenizer:: Tokenkind :: Eof {
27- tokens. push ( token. literal ) ;
28- token = lexer. next_token ( ) ;
29- }
25+ let runer = read ( ) ;
26+ //println!("Lexer initialized with input: {}", input);
27+
28+ // let mut tokens = Vec::new();
29+ // // let mut token = lexer.next_token();
30+ // // while token.kind != lexericals::tokenizer::Tokenkind::Eof {
31+ // // tokens.push(token.literal);
32+ // // token = lexer.next_token();
33+ // // }
3034
3135 // loop {
3236 // let token = lexer.next_token();
@@ -35,19 +39,105 @@ fn main() {
3539 // }
3640 // tokens.push(token.literal);
3741 // }
38- println ! ( "Tokens: {:?}" , tokens) ;
42+ // println!("Tokens: {:?}", tokens);
43+ // println!("Tokens: {:?}", lexer);
3944
40- // for (idx,token) in lexer.input.clone() .into_iter().enumerate() {
41- // println!("charater at index:{} token:{}", idx, token);
42- // let token = lexer.next_token();
43- // println!("Tokenkind at index:{} is:{}", idx, token.kind);
44- // println!("literal at index:{} is:{} ", idx, token.literal);
45- // }
45+ for ( idx, token) in runer . into_iter ( ) . enumerate ( ) {
46+ // println!("charater at index:{} token:{:? }", idx, token);
47+ let inside_token = lexer. next_token ( ) ;
48+ println ! ( "Tokenkind at index:{} expected is:{} gotten is:{} " , idx, token. kind , inside_token . kind) ;
49+ println ! ( "literal at index:{} expected is:{} gotten is:{} " , idx, token. literal , inside_token . literal) ;
50+ }
4651
4752 // println!(" last Current character: {:?}", lexer.next_token());
4853
4954}
5055
51- fn read_string ( ch : char ) -> String {
52- todo ! ( "Implement string reading logic" ) ;
56+ // fn read_string(ch:char) -> String {
57+ // todo!("Implement string reading logic");
58+ // }
59+
60+ fn read ( ) -> Vec < Token > {
61+
62+ let expected_token= vec ! [
63+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
64+ Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
65+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
66+ Token :: new( Tokenkind :: Int , String :: from( "5000000" ) ) ,
67+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
68+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
69+ Token :: new( Tokenkind :: Ident , String :: from( "floattest" ) ) ,
70+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
71+ Token :: new( Tokenkind :: Float , String :: from( "5.0" ) ) ,
72+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
73+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
74+ Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
75+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
76+ Token :: new( Tokenkind :: Int , String :: from( "10" ) ) ,
77+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
78+ // Token::new(Tokenkind::Let, String::from("let")),
79+ // Token::new(Tokenkind::Ident, String::from("ten")),
80+ // Token::new(Tokenkind::Assign, String::from("=")),
81+ // Token::new(Tokenkind::Int, String::from("10")),
82+ // Token::new(Tokenkind::Semicolon, String::from(";")),
83+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
84+ Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
85+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
86+ Token :: new( Tokenkind :: Function , String :: from( "fn" ) ) ,
87+ Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
88+ Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
89+ Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
90+ Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
91+ Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
92+ Token :: new( Tokenkind :: Lbrace , String :: from( "{" ) ) ,
93+ Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
94+ Token :: new( Tokenkind :: Plus , String :: from( "+" ) ) ,
95+ Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
96+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
97+ Token :: new( Tokenkind :: Rbrace , String :: from( "}" ) ) ,
98+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
99+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
100+ Token :: new( Tokenkind :: Ident , String :: from( "result" ) ) ,
101+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
102+ Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
103+ Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
104+ Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
105+ Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
106+ Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
107+ Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
108+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
109+ Token :: new( Tokenkind :: Eof , String :: new( ) ) ,
110+
111+ ] ;
112+ expected_token
53113}
114+
115+ // fn main() {
116+ // let input = r#"
117+ // let five = 5;
118+ // let ten = 10;
119+ // let add = fn(x, y) {
120+ // x + y;
121+ // };
122+ // let result = add(five, ten);
123+ // "#;
124+
125+ // let mut lexer = Lexer::new(input);
126+ // println!("Lexer initialized with input: {}", input);
127+
128+ // let mut tokens = Vec::new();
129+
130+ // loop {
131+ // let token = lexer.next_token();
132+ // if token.kind == lexericals::tokenizer::Tokenkind::Eof {
133+ // break;
134+ // }
135+ // tokens.push(token); // push the whole token (no clone)
136+ // }
137+
138+ // for (idx, token) in tokens.into_iter().enumerate() {
139+ // println!("character at index:{} token:{:?}", idx, token);
140+ // println!("Tokenkind at index:{} is:{:?}", idx, token.kind);
141+ // println!("literal at index:{} is:{} ", idx, token.literal);
142+ // }
143+ // }
0 commit comments