11mod lexericals;
2+ mod repl;
3+ use std:: io;
4+
25use crate :: lexericals:: lexer:: Lexer ;
36use crate :: lexericals:: tokenizer:: { Token , Tokenkind } ;
7+ use crate :: repl:: start;
48
59fn main ( ) {
6- // let token = Token {
7- // kind: Tokenkind::Ident,
8- // literal: String::from("example"),
9- // };
10- // println!("Token kind: {:?}, literal: {}", token.kind, token.literal);
11- // println!("Token {:?}", token);
12-
13- let input = r#"
14- let five = 5000000;
15- let floattest = 5.0;
16- let ten = 10;
17- let add = fn(x, y) {
18- x + y;
19- };
20- let result = add(five, ten);
21- ==
22- "# ;
10+ // Initialize the lexer with the input string
11+ println ! ( "this is the issionlang terminal \n write your code below" ) ;
12+ println ! ( "press ctrl+c to exit the terminal" ) ;
13+ start ( io:: stdin ( ) , io:: stdout ( ) ) ;
14+ //print_tokens();
2315
24- let mut lexer = Lexer :: new ( input) ;
25- let runer = read ( ) ;
26- //println!("Lexer initialized with input: {}", input);
16+ }
2717
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- // // }
3418
35- // loop {
36- // let token = lexer.next_token();
37- // if token.kind == lexericals::tokenizer::Tokenkind::Eof {
38- // break;
39- // }
40- // tokens.push(token.literal);
41- // }
42- // println!("Tokens: {:?}", tokens);
43- // println!("Tokens: {:?}", lexer);
19+ fn print_tokens ( ) {
20+ let mut lexer = Lexer :: new ( read_input ( ) ) ;
21+ let runer = expected_token ( ) ;
4422
4523 for ( idx, token) in runer. into_iter ( ) . enumerate ( ) {
4624 // println!("charater at index:{} token:{:?}", idx, token);
@@ -54,94 +32,75 @@ fn main() {
5432 idx, token. literal, inside_token. literal
5533 ) ;
5634 }
57-
58- // println!(" last Current character: {:?}", lexer.next_token());
5935}
6036
61- // fn read_string(ch:char) -> String {
62- // todo!("Implement string reading logic");
63- // }
6437
65- fn read ( ) -> Vec < Token > {
66- let expected_token = vec ! [
67- Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
68- Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
69- Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
70- Token :: new( Tokenkind :: Int , String :: from( "5000000" ) ) ,
71- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
72- Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
73- Token :: new( Tokenkind :: Ident , String :: from( "floattest" ) ) ,
74- Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
75- Token :: new( Tokenkind :: Float , String :: from( "5.0" ) ) ,
76- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
77- Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
78- Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
79- Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
80- Token :: new( Tokenkind :: Int , String :: from( "10" ) ) ,
81- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
82- // Token::new(Tokenkind::Let, String::from("let")),
83- // Token::new(Tokenkind::Ident, String::from("ten")),
84- // Token::new(Tokenkind::Assign, String::from("=")),
85- // Token::new(Tokenkind::Int, String::from("10")),
86- // Token::new(Tokenkind::Semicolon, String::from(";")),
87- Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
88- Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
89- Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
90- Token :: new( Tokenkind :: Function , String :: from( "fn" ) ) ,
91- Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
92- Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
93- Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
94- Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
95- Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
96- Token :: new( Tokenkind :: Lbrace , String :: from( "{" ) ) ,
97- Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
98- Token :: new( Tokenkind :: Plus , String :: from( "+" ) ) ,
99- Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
100- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
101- Token :: new( Tokenkind :: Rbrace , String :: from( "}" ) ) ,
102- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
103- Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
104- Token :: new( Tokenkind :: Ident , String :: from( "result" ) ) ,
105- Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
106- Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
107- Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
108- Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
109- Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
110- Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
111- Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
112- Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
113- Token :: new( Tokenkind :: Eq , String :: from( "==" ) ) ,
114- Token :: new( Tokenkind :: Eof , String :: new( ) ) ,
115- ] ;
116- expected_token
117- }
118-
119- // fn main() {
120- // let input = r#"
121- // let five = 5;
122- // let ten = 10;
123- // let add = fn(x, y) {
124- // x + y;
125- // };
126- // let result = add(five, ten);
127- // "#;
38+ fn read_input ( ) -> & ' static str {
39+ let input = r#"
40+ let five = 5000000;
41+ let floattest = 5.0;
42+ let ten = 10;
43+ let add = fn(x, y) {
44+ x + y;
45+ };
46+ let result = add(five, ten);
47+ == True; False;
48+ "# ;
12849
129- // let mut lexer = Lexer::new(input);
130- // println!("Lexer initialized with input: {}", input);
50+ input
51+ }
52+ fn expected_token ( ) -> Vec < Token > {
13153
132- // let mut tokens = Vec::new();
54+ let expect_tokens = vec ! [
55+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
56+ Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
57+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
58+ Token :: new( Tokenkind :: Int , String :: from( "5000000" ) ) ,
59+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
60+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
61+ Token :: new( Tokenkind :: Ident , String :: from( "floattest" ) ) ,
62+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
63+ Token :: new( Tokenkind :: Float , String :: from( "5.0" ) ) ,
64+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
65+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
66+ Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
67+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
68+ Token :: new( Tokenkind :: Int , String :: from( "10" ) ) ,
69+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
70+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
71+ Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
72+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
73+ Token :: new( Tokenkind :: Function , String :: from( "fn" ) ) ,
74+ Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
75+ Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
76+ Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
77+ Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
78+ Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
79+ Token :: new( Tokenkind :: Lbrace , String :: from( "{" ) ) ,
80+ Token :: new( Tokenkind :: Ident , String :: from( "x" ) ) ,
81+ Token :: new( Tokenkind :: Plus , String :: from( "+" ) ) ,
82+ Token :: new( Tokenkind :: Ident , String :: from( "y" ) ) ,
83+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
84+ Token :: new( Tokenkind :: Rbrace , String :: from( "}" ) ) ,
85+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
86+ Token :: new( Tokenkind :: Let , String :: from( "let" ) ) ,
87+ Token :: new( Tokenkind :: Ident , String :: from( "result" ) ) ,
88+ Token :: new( Tokenkind :: Assign , String :: from( "=" ) ) ,
89+ Token :: new( Tokenkind :: Ident , String :: from( "add" ) ) ,
90+ Token :: new( Tokenkind :: Lparen , String :: from( "(" ) ) ,
91+ Token :: new( Tokenkind :: Ident , String :: from( "five" ) ) ,
92+ Token :: new( Tokenkind :: Comma , String :: from( "," ) ) ,
93+ Token :: new( Tokenkind :: Ident , String :: from( "ten" ) ) ,
94+ Token :: new( Tokenkind :: Rparen , String :: from( ")" ) ) ,
95+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
96+ Token :: new( Tokenkind :: Eq , String :: from( "==" ) ) ,
97+ Token :: new( Tokenkind :: Bool , String :: from( "True" ) ) ,
98+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
99+ Token :: new( Tokenkind :: Bool , String :: from( "False" ) ) ,
100+ Token :: new( Tokenkind :: Semicolon , String :: from( ";" ) ) ,
101+ Token :: new( Tokenkind :: Eof , String :: new( ) ) ,
102+ ] ;
103+ expect_tokens
104+ }
133105
134- // loop {
135- // let token = lexer.next_token();
136- // if token.kind == lexericals::tokenizer::Tokenkind::Eof {
137- // break;
138- // }
139- // tokens.push(token); // push the whole token (no clone)
140- // }
141106
142- // for (idx, token) in tokens.into_iter().enumerate() {
143- // println!("character at index:{} token:{:?}", idx, token);
144- // println!("Tokenkind at index:{} is:{:?}", idx, token.kind);
145- // println!("literal at index:{} is:{} ", idx, token.literal);
146- // }
147- // }
0 commit comments