@@ -19,46 +19,38 @@ pub fn param(parameter: String, param_type: String, initial_value: Option<String
1919 }
2020}
2121
22- pub fn extract_parameters ( tokens : & mut Peekable < Iter < Token > > ) -> Vec < ParameterNode > {
22+ pub fn extract_parameters ( tokens : & Vec < Token > ) -> Vec < ParameterNode > {
2323 let mut params = vec ! [ ] ;
24+ let mut i = 0 ;
2425
25- while let Some ( token) = tokens. next ( ) {
26- match & token. token_type {
27- TokenType :: RPAREN => break ,
28- TokenType :: VAR => {
29- let name = if let Some ( Token { token_type : TokenType :: IDENTIFIER ( name) , .. } ) = tokens. next ( ) {
30- name. clone ( )
31- } else {
32- continue ;
33- } ;
26+ while i < tokens. len ( ) {
27+ if matches ! ( tokens[ i] . token_type, TokenType :: VAR ) {
28+ // parameter name
29+ let name = if let Some ( TokenType :: IDENTIFIER ( name) ) = tokens. get ( i + 1 ) . map ( |t| & t. token_type ) {
30+ name. clone ( )
31+ } else {
32+ continue ; // Skip if no name exists
33+ } ;
3434
35- // 타입 추출
36- let param_type = match tokens. next ( ) {
37- Some ( Token { token_type : TokenType :: TypeInt ( _ ) , lexeme , .. } ) => lexeme . clone ( ) ,
38- Some ( Token { token_type : TokenType :: TypeFloat ( _ ) , lexeme , .. } ) => lexeme. clone ( ) ,
39- Some ( Token { token_type : TokenType :: STRING ( _ ) , lexeme , .. } ) => lexeme . clone ( ) ,
40- _ => "unknown" . to_string ( ) ,
41- } ;
35+ // parameter type
36+ let param_type = if let Some ( TokenType :: TypeInt ( _ ) ) = tokens. get ( i + 3 )
37+ . map ( |t| & t . token_type ) {
38+ tokens [ i + 3 ] . lexeme . clone ( )
39+ } else {
40+ "unknown" . to_string ( ) // If you don't have type information, you don't know
41+ } ;
4242
43- let initial_value = if let Some ( Token { token_type : TokenType :: EQUAL , .. } ) = tokens. peek ( ) {
44- tokens. next ( ) ;
45- if let Some ( Token { lexeme, .. } ) = tokens. next ( ) {
46- Some ( lexeme. clone ( ) )
47- } else {
48- None
49- }
50- } else {
51- None
52- } ;
43+ let initial_value = if let Some ( TokenType :: EQUAL ) = tokens. get ( i + 4 )
44+ . map ( |t| & t. token_type ) {
45+ Some ( tokens[ i + 5 ] . lexeme . clone ( ) )
46+ } else {
47+ None
48+ } ;
5349
54- params. push ( ParameterNode {
55- name,
56- param_type,
57- initial_value,
58- } ) ;
59- }
60- _ => continue ,
50+ params. push ( ParameterNode { name, param_type, initial_value } ) ;
51+ i += 6 ; // Move to the next token
6152 }
53+ i += 1 ;
6254 }
6355
6456 params
@@ -69,13 +61,12 @@ pub fn extract_body<'a>(tokens: &mut Peekable<Iter<'a, Token>>) -> Vec<ASTNode>
6961
7062 while let Some ( token) = tokens. next ( ) {
7163 match & token. token_type {
72- /*
64+ TokenType :: EOF => break ,
7365 TokenType :: VAR => {
7466 if let Some ( ast_node) = parse_var ( tokens) {
7567 body. push ( ast_node) ;
7668 }
7769 }
78- */
7970 TokenType :: PRINTLN => {
8071 if let Some ( ast_node) = parse_println ( tokens) {
8172 body. push ( ast_node) ;
@@ -110,33 +101,6 @@ pub fn extract_body<'a>(tokens: &mut Peekable<Iter<'a, Token>>) -> Vec<ASTNode>
110101 body
111102}
112103
113- pub fn parse_function ( tokens : & mut Peekable < Iter < Token > > ) -> Option < ASTNode > {
114- let function_name = if let Some ( Token { token_type : TokenType :: IDENTIFIER ( name) , .. } ) = tokens. next ( ) {
115- name. clone ( )
116- } else {
117- return None ;
118- } ;
119-
120- let parameters = if let Some ( Token { token_type : TokenType :: LPAREN , .. } ) = tokens. next ( ) {
121- extract_parameters ( tokens)
122- } else {
123- vec ! [ ]
124- } ;
125-
126- let body = if let Some ( Token { token_type : TokenType :: LBRACE , .. } ) = tokens. next ( ) {
127- extract_body ( tokens)
128- } else {
129- vec ! [ ]
130- } ;
131-
132- Some ( ASTNode :: Function ( FunctionNode {
133- name : function_name,
134- parameters,
135- body,
136- } ) )
137- }
138-
139- /*
140104// VAR parsing
141105fn parse_var ( tokens : & mut Peekable < Iter < ' _ , Token > > ) -> Option < ASTNode > {
142106 if let Some ( Token { token_type : TokenType :: IDENTIFIER ( name) , .. } ) = tokens. next ( ) {
@@ -229,8 +193,6 @@ fn parse_var(tokens: &mut Peekable<Iter<'_, Token>>) -> Option<ASTNode> {
229193 None
230194}
231195
232- */
233-
234196// PRINTLN parsing
235197fn parse_println ( tokens : & mut Peekable < Iter < Token > > ) -> Option < ASTNode > {
236198 if let Some ( Token { token_type : TokenType :: LPAREN , .. } ) = tokens. next ( ) {
0 commit comments