TypeScript_Rust_Compiler/
parser.rs

1//! Parser for TypeScript code using nom parser combinators
2
3use crate::ast::*;
4use crate::error::{CompilerError, Result};
5use crate::lexer::{Token, Keyword};
6
7/// Parser for TypeScript code
8pub struct Parser {
9    tokens: Vec<Token>,
10    position: usize,
11}
12
13impl Parser {
14    /// Create a new parser
15    pub fn new(tokens: Vec<Token>) -> Self {
16        Self {
17            tokens,
18            position: 0,
19        }
20    }
21
22    /// Parse the tokens into an AST
23    pub fn parse(&mut self) -> Result<Program> {
24        let mut statements = Vec::new();
25        let mut iterations = 0;
26        let max_iterations = self.tokens.len() * 2; // Prevent infinite loops
27        let mut errors = Vec::new();
28
29        while self.position < self.tokens.len() && iterations < max_iterations {
30            let old_position = self.position;
31            
32            match self.parse_statement() {
33                Ok(Some(statement)) => {
34                    statements.push(statement);
35                }
36                Ok(None) => {
37                    break;
38                }
39                Err(error) => {
40                    // Log error but continue parsing
41                    errors.push(error);
42                    // Skip current token and continue
43                    self.advance();
44                }
45            }
46            
47            // Check if we made progress
48            if self.position == old_position {
49                // No progress made, advance position to prevent infinite loop
50                self.position += 1;
51            }
52            
53            // If we encounter an error, try to recover by skipping tokens
54            if self.position < self.tokens.len() {
55                let current_token = &self.tokens[self.position];
56                if matches!(current_token, Token::EOF) {
57                    break;
58                }
59            }
60            
61            iterations += 1;
62        }
63
64        if iterations >= max_iterations {
65            return Err(CompilerError::parse_error(
66                self.position,
67                1,
68                "Parser stuck in infinite loop".to_string(),
69            ));
70        }
71
72        // If we have statements, return them even if there were errors
73        if !statements.is_empty() {
74            Ok(Program { statements })
75        } else if !errors.is_empty() {
76            // If no statements but we have errors, return the first error
77            Err(errors.into_iter().next().unwrap())
78        } else {
79            Ok(Program { statements })
80        }
81    }
82
83    /// Parse a statement
84    fn parse_statement(&mut self) -> Result<Option<Statement>> {
85        if self.position >= self.tokens.len() {
86            return Ok(None);
87        }
88
89        // Check if we've reached EOF
90        if self.current_token() == &Token::EOF {
91            return Ok(None);
92        }
93
94        let token = &self.tokens[self.position];
95        let statement = match token {
96            Token::EOF => return Ok(None),
97            Token::Keyword(keyword) => match keyword {
98                crate::lexer::Keyword::Let
99                | crate::lexer::Keyword::Var => self.parse_variable_declaration()?,
100                crate::lexer::Keyword::Const => {
101                    // Check if this is "const enum"
102                    if self.position + 1 < self.tokens.len() {
103                        if let Token::Keyword(crate::lexer::Keyword::Enum) = &self.tokens[self.position + 1] {
104                            // This is "const enum", parse as enum declaration
105                            self.parse_const_enum_declaration()?
106                        } else {
107                            // This is regular "const", parse as variable declaration
108                            self.parse_variable_declaration()?
109                        }
110                    } else {
111                        self.parse_variable_declaration()?
112                    }
113                },
114                crate::lexer::Keyword::Function => self.parse_function_declaration()?,
115                crate::lexer::Keyword::Class => self.parse_class_declaration()?,
116                crate::lexer::Keyword::Interface => self.parse_interface_declaration()?,
117                crate::lexer::Keyword::Type => self.parse_type_alias()?,
118                crate::lexer::Keyword::Enum => self.parse_enum_declaration()?,
119                crate::lexer::Keyword::Import => self.parse_import_declaration()?,
120                crate::lexer::Keyword::Export => self.parse_export_declaration()?,
121                crate::lexer::Keyword::Namespace => self.parse_namespace_declaration()?,
122                crate::lexer::Keyword::Module => self.parse_module_declaration()?,
123                crate::lexer::Keyword::Declare => self.parse_declare_statement()?,
124                crate::lexer::Keyword::Return => self.parse_return_statement()?,
125                crate::lexer::Keyword::Throw => self.parse_throw_statement()?,
126                crate::lexer::Keyword::If => self.parse_if_statement()?,
127                crate::lexer::Keyword::Else => self.parse_expression_statement()?,
128                _ => self.parse_expression_statement()?,
129            },
130            Token::LeftBrace => self.parse_block_statement()?,
131            Token::Semicolon => {
132                self.advance();
133                return self.parse_statement();
134            }
135            _ => {
136                // Try to parse as expression statement, but if it fails, skip the token
137                match self.parse_expression_statement() {
138                    Ok(expr_stmt) => expr_stmt,
139                    Err(_) => {
140                        // Skip problematic token and continue
141                        self.advance();
142                        return Ok(None);
143                    }
144                }
145            }
146        };
147
148        Ok(Some(statement))
149    }
150
151    /// Parse variable declaration
152    fn parse_variable_declaration(&mut self) -> Result<Statement> {
153        let keyword = self.expect_keyword()?;
154        let name = self.expect_identifier()?;
155        let type_annotation = if self.current_token() == &Token::Colon {
156            self.advance();
157            Some(self.parse_type()?)
158        } else {
159            None
160        };
161
162        let initializer = if self.current_token() == &Token::Assign {
163            self.advance();
164            Some(self.parse_expression()?)
165        } else {
166            None
167        };
168
169        self.expect_semicolon()?;
170
171        Ok(Statement::VariableDeclaration(VariableDeclaration {
172            keyword,
173            name,
174            type_annotation,
175            initializer,
176        }))
177    }
178
179    /// Parse function declaration
180    fn parse_function_declaration(&mut self) -> Result<Statement> {
181        self.expect_keyword()?; // consume 'function' keyword
182        let name = self.expect_identifier()?;
183        let type_parameters = self.parse_type_parameters()?;
184        let parameters = self.parse_parameters()?;
185        let return_type = if self.current_token() == &Token::Colon {
186            self.advance();
187            Some(self.parse_type()?)
188        } else {
189            None
190        };
191        let body = self.parse_block_statement()?;
192
193        Ok(Statement::FunctionDeclaration(FunctionDeclaration {
194            name,
195            type_parameters,
196            parameters,
197            return_type,
198            body: Box::new(body),
199        }))
200    }
201
202    /// Parse class declaration
203    fn parse_class_declaration(&mut self) -> Result<Statement> {
204        self.expect_keyword()?; // consume 'class' keyword
205        let name = self.expect_identifier()?;
206        let type_parameters = self.parse_type_parameters()?;
207        let extends = if self.current_token() == &Token::Keyword(crate::lexer::Keyword::Extends) {
208            self.advance();
209            Some(self.parse_type()?)
210        } else {
211            None
212        };
213        let implements = self.parse_implements()?;
214        let body = self.parse_class_body()?;
215
216        Ok(Statement::ClassDeclaration(ClassDeclaration {
217            name,
218            type_parameters,
219            extends,
220            implements,
221            body,
222        }))
223    }
224
225    /// Parse interface declaration
226    fn parse_interface_declaration(&mut self) -> Result<Statement> {
227        self.expect_keyword()?; // consume 'interface' keyword
228        let name = self.expect_identifier()?;
229        let type_parameters = self.parse_type_parameters()?;
230        let extends = self.parse_extends()?;
231        let body = self.parse_interface_body()?;
232
233        Ok(Statement::InterfaceDeclaration(InterfaceDeclaration {
234            name,
235            type_parameters,
236            extends,
237            body,
238        }))
239    }
240
241    /// Parse type alias
242    fn parse_type_alias(&mut self) -> Result<Statement> {
243        self.expect_keyword()?; // consume 'type' keyword
244        let name = self.expect_identifier()?;
245        let type_parameters = self.parse_type_parameters()?;
246        self.expect_token(&Token::Assign)?;
247        let type_definition = self.parse_type()?;
248        self.expect_semicolon()?;
249
250        Ok(Statement::TypeAlias(TypeAlias {
251            name,
252            type_parameters,
253            type_definition,
254        }))
255    }
256
257    /// Parse enum declaration
258    fn parse_enum_declaration(&mut self) -> Result<Statement> {
259        self.expect_keyword()?; // consume 'enum' keyword
260        let name = self.expect_identifier()?;
261        let members = self.parse_enum_members()?;
262
263        Ok(Statement::EnumDeclaration(EnumDeclaration {
264            name,
265            members,
266        }))
267    }
268
269    fn parse_const_enum_declaration(&mut self) -> Result<Statement> {
270        self.expect_keyword()?; // consume 'const' keyword
271        self.expect_keyword()?; // consume 'enum' keyword
272        let name = self.expect_identifier()?;
273        let members = self.parse_enum_members()?;
274
275        // For now, treat const enum the same as regular enum
276        // In a full implementation, we'd have a ConstEnumDeclaration type
277        Ok(Statement::EnumDeclaration(EnumDeclaration {
278            name,
279            members,
280        }))
281    }
282
283    /// Parse import declaration
284    fn parse_import_declaration(&mut self) -> Result<Statement> {
285        self.expect_keyword()?; // import
286        let specifiers = self.parse_import_specifiers()?;
287        self.expect_keyword()?; // from
288        let source = self.parse_string_literal()?;
289        self.expect_semicolon()?;
290
291        Ok(Statement::ImportDeclaration(ImportDeclaration {
292            specifiers,
293            source,
294        }))
295    }
296
297    /// Parse export declaration
298    fn parse_export_declaration(&mut self) -> Result<Statement> {
299        // Consume 'export' keyword
300        self.advance();
301        // Parse the specific declaration type directly
302        let token = self.current_token().clone();
303        let declaration = match token {
304            Token::Keyword(crate::lexer::Keyword::Class) => self.parse_class_declaration()?,
305            Token::Keyword(crate::lexer::Keyword::Interface) => {
306                self.parse_interface_declaration()?
307            }
308            Token::Keyword(crate::lexer::Keyword::Function) => self.parse_function_declaration()?,
309            Token::Keyword(crate::lexer::Keyword::Const) => self.parse_variable_declaration()?,
310            Token::Keyword(crate::lexer::Keyword::Let) => self.parse_variable_declaration()?,
311            Token::Keyword(crate::lexer::Keyword::Var) => self.parse_variable_declaration()?,
312            Token::Keyword(crate::lexer::Keyword::Enum) => self.parse_enum_declaration()?,
313            Token::Keyword(crate::lexer::Keyword::Type) => {
314                // Check if this is "export type { ... }" or "export type Name = ..."
315                if self.position + 1 < self.tokens.len() {
316                    if let Token::LeftBrace = &self.tokens[self.position + 1] {
317                        // This is "export type { ... }", parse as export type statement
318                        self.parse_export_type_statement()?
319                    } else {
320                        // This is "export type Name = ...", parse as type alias
321                        self.parse_type_alias()?
322                    }
323                } else {
324                    self.parse_type_alias()?
325                }
326            },
327            Token::LeftBrace => {
328                // This is "export { ... }", parse as export statement
329                self.parse_export_statement()?
330            },
331            _ => {
332                return Err(CompilerError::parse_error(
333                    1,
334                    1,
335                    format!("Unexpected token in export declaration: {:?}", token),
336                ))
337            }
338        };
339        Ok(Statement::ExportDeclaration(Box::new(ExportDeclaration {
340            declaration: Box::new(declaration),
341        })))
342    }
343
344    fn parse_export_statement(&mut self) -> Result<Statement> {
345        self.expect_token(&Token::LeftBrace)?; // consume '{'
346        
347        let mut exports = Vec::new();
348        while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
349            let name = self.expect_identifier()?;
350            exports.push(name);
351            
352            if self.current_token() == &Token::Comma {
353                self.advance(); // consume ','
354            }
355        }
356        
357        self.expect_token(&Token::RightBrace)?; // consume '}'
358        self.expect_semicolon()?;
359        
360        Ok(Statement::ExportDeclaration(Box::new(ExportDeclaration {
361            declaration: Box::new(Statement::ExpressionStatement(ExpressionStatement {
362                expression: Expression::Literal(Literal::String(format!("Export: {}", exports.join(", ")))),
363            })),
364        })))
365    }
366
367    fn parse_export_type_statement(&mut self) -> Result<Statement> {
368        self.expect_keyword()?; // consume 'type' keyword
369        self.expect_token(&Token::LeftBrace)?; // consume '{'
370        
371        let mut type_names = Vec::new();
372        while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
373            let name = self.expect_identifier()?;
374            type_names.push(name);
375            
376            if self.current_token() == &Token::Comma {
377                self.advance();
378            }
379        }
380        
381        self.expect_token(&Token::RightBrace)?; // consume '}'
382        self.expect_semicolon()?;
383        
384        // For now, create a simple export statement
385        // In a full implementation, we'd have a proper ExportTypeStatement type
386        Ok(Statement::ExportDeclaration(Box::new(ExportDeclaration {
387            declaration: Box::new(Statement::TypeAlias(TypeAlias {
388                name: "exported_types".to_string(),
389                type_parameters: Vec::new(),
390                type_definition: Type::Any,
391            })),
392        })))
393    }
394
395    /// Parse namespace declaration
396    fn parse_namespace_declaration(&mut self) -> Result<Statement> {
397        self.expect_keyword()?; // namespace
398        let name = self.expect_identifier()?;
399        let body = self.parse_block_statement()?;
400
401        Ok(Statement::NamespaceDeclaration(NamespaceDeclaration {
402            name,
403            body: Box::new(body),
404        }))
405    }
406
407    /// Parse module declaration
408    fn parse_module_declaration(&mut self) -> Result<Statement> {
409        self.expect_keyword()?; // module
410        let name = self.parse_string_literal()?;
411        let body = self.parse_block_statement()?;
412
413        Ok(Statement::ModuleDeclaration(ModuleDeclaration {
414            name,
415            body: Box::new(body),
416        }))
417    }
418
419    /// Parse declare statement
420    fn parse_declare_statement(&mut self) -> Result<Statement> {
421        self.expect_keyword()?; // declare
422        let declaration = self.parse_statement()?;
423        Ok(Statement::DeclareStatement(Box::new(DeclareStatement {
424            declaration: Box::new(declaration.unwrap()),
425        })))
426    }
427
428    /// Parse return statement
429    fn parse_return_statement(&mut self) -> Result<Statement> {
430        self.expect_keyword()?; // return
431
432        let argument = if self.current_token() == &Token::Semicolon {
433            None
434        } else {
435            Some(self.parse_expression()?)
436        };
437
438        // Optional semicolon
439        if self.current_token() == &Token::Semicolon {
440            self.advance();
441        }
442
443        Ok(Statement::ReturnStatement(ReturnStatement { argument }))
444    }
445
446    /// Parse throw statement
447    fn parse_throw_statement(&mut self) -> Result<Statement> {
448        self.expect_keyword()?; // throw
449
450        let argument = self.parse_expression()?;
451
452        // Optional semicolon
453        if self.current_token() == &Token::Semicolon {
454            self.advance();
455        }
456
457        Ok(Statement::ThrowStatement(ThrowStatement { argument }))
458    }
459
460    /// Parse expression statement
461    fn parse_expression_statement(&mut self) -> Result<Statement> {
462        let expression = self.parse_expression()?;
463        self.expect_semicolon()?;
464        Ok(Statement::ExpressionStatement(ExpressionStatement {
465            expression,
466        }))
467    }
468
469    /// Parse block statement
470    fn parse_block_statement(&mut self) -> Result<Statement> {
471        self.expect_token(&Token::LeftBrace)?;
472        let mut statements = Vec::new();
473
474        while self.current_token() != &Token::RightBrace {
475            if let Some(statement) = self.parse_statement()? {
476                statements.push(statement);
477            } else {
478                break;
479            }
480        }
481
482        self.expect_token(&Token::RightBrace)?;
483        Ok(Statement::BlockStatement(BlockStatement { statements }))
484    }
485
486    /// Parse expression
487    fn parse_expression(&mut self) -> Result<Expression> {
488        self.parse_assignment_expression()
489    }
490
491    /// Parse assignment expression
492    fn parse_assignment_expression(&mut self) -> Result<Expression> {
493        let left = self.parse_conditional_expression()?;
494
495        if self.is_assignment_operator() {
496            let operator = self.current_token().clone();
497            self.advance();
498            let right = self.parse_assignment_expression()?;
499            Ok(Expression::Assignment(AssignmentExpression {
500                left: Box::new(left),
501                operator,
502                right: Box::new(right),
503            }))
504        } else {
505            Ok(left)
506        }
507    }
508
509    /// Parse conditional expression
510    fn parse_conditional_expression(&mut self) -> Result<Expression> {
511        let test = self.parse_logical_or_expression()?;
512
513        if self.current_token() == &Token::QuestionMark {
514            self.advance();
515            let consequent = self.parse_expression()?;
516            self.expect_token(&Token::Colon)?;
517            let alternate = self.parse_expression()?;
518            Ok(Expression::Conditional(ConditionalExpression {
519                test: Box::new(test),
520                consequent: Box::new(consequent),
521                alternate: Box::new(alternate),
522            }))
523        } else {
524            Ok(test)
525        }
526    }
527
528    /// Parse logical OR expression
529    fn parse_logical_or_expression(&mut self) -> Result<Expression> {
530        let mut left = self.parse_logical_and_expression()?;
531
532        while self.current_token() == &Token::Or {
533            self.advance();
534            let right = self.parse_logical_and_expression()?;
535            left = Expression::Logical(LogicalExpression {
536                left: Box::new(left),
537                operator: Token::Or,
538                right: Box::new(right),
539            });
540        }
541
542        Ok(left)
543    }
544
545    /// Parse logical AND expression
546    fn parse_logical_and_expression(&mut self) -> Result<Expression> {
547        let mut left = self.parse_equality_expression()?;
548
549        while self.current_token() == &Token::And {
550            self.advance();
551            let right = self.parse_equality_expression()?;
552            left = Expression::Logical(LogicalExpression {
553                left: Box::new(left),
554                operator: Token::And,
555                right: Box::new(right),
556            });
557        }
558
559        Ok(left)
560    }
561
562    /// Parse equality expression
563    fn parse_equality_expression(&mut self) -> Result<Expression> {
564        let mut left = self.parse_relational_expression()?;
565
566        while self.is_equality_operator() {
567            let operator = self.current_token().clone();
568            self.advance();
569            let right = self.parse_relational_expression()?;
570            left = Expression::Binary(BinaryExpression {
571                left: Box::new(left),
572                operator,
573                right: Box::new(right),
574            });
575        }
576
577        Ok(left)
578    }
579
580    /// Parse relational expression
581    fn parse_relational_expression(&mut self) -> Result<Expression> {
582        let mut left = self.parse_additive_expression()?;
583
584        while self.is_relational_operator() {
585            let operator = self.current_token().clone();
586            self.advance();
587            let right = self.parse_additive_expression()?;
588            left = Expression::Binary(BinaryExpression {
589                left: Box::new(left),
590                operator,
591                right: Box::new(right),
592            });
593        }
594
595        Ok(left)
596    }
597
598    /// Parse additive expression
599    fn parse_additive_expression(&mut self) -> Result<Expression> {
600        let mut left = self.parse_multiplicative_expression()?;
601
602        while self.is_additive_operator() {
603            let operator = self.current_token().clone();
604            self.advance();
605            let right = self.parse_multiplicative_expression()?;
606            left = Expression::Binary(BinaryExpression {
607                left: Box::new(left),
608                operator,
609                right: Box::new(right),
610            });
611        }
612
613        Ok(left)
614    }
615
616    /// Parse multiplicative expression
617    fn parse_multiplicative_expression(&mut self) -> Result<Expression> {
618        let mut left = self.parse_unary_expression()?;
619
620        while self.is_multiplicative_operator() {
621            let operator = self.current_token().clone();
622            self.advance();
623            let right = self.parse_unary_expression()?;
624            left = Expression::Binary(BinaryExpression {
625                left: Box::new(left),
626                operator,
627                right: Box::new(right),
628            });
629        }
630
631        Ok(left)
632    }
633
634    /// Parse unary expression
635    fn parse_unary_expression(&mut self) -> Result<Expression> {
636        if self.is_unary_operator() {
637            let operator = self.current_token().clone();
638            self.advance();
639            let argument = self.parse_unary_expression()?;
640            Ok(Expression::Unary(UnaryExpression {
641                operator,
642                argument: Box::new(argument),
643            }))
644        } else {
645            self.parse_postfix_expression()
646        }
647    }
648
649    /// Parse postfix expression
650    fn parse_postfix_expression(&mut self) -> Result<Expression> {
651        let mut left = self.parse_primary_expression()?;
652
653        while self.is_postfix_operator() {
654            match self.current_token() {
655                Token::LeftParen => {
656                    self.advance();
657                    let arguments = self.parse_arguments()?;
658                    self.expect_token(&Token::RightParen)?;
659                    left = Expression::Call(CallExpression {
660                        callee: Box::new(left),
661                        arguments,
662                    });
663                }
664                Token::LeftBracket => {
665                    self.advance();
666                    let index = self.parse_expression()?;
667                    self.expect_token(&Token::RightBracket)?;
668                    left = Expression::Member(MemberExpression {
669                        object: Box::new(left),
670                        property: Box::new(index),
671                        computed: true,
672                    });
673                }
674                Token::Dot => {
675                    self.advance();
676                    let property = self.expect_identifier()?;
677                    left = Expression::Member(MemberExpression {
678                        object: Box::new(left),
679                        property: Box::new(Expression::Identifier(property)),
680                        computed: false,
681                    });
682                }
683                _ => break,
684            }
685        }
686
687        Ok(left)
688    }
689
690    /// Parse primary expression
691    fn parse_primary_expression(&mut self) -> Result<Expression> {
692        let token = self.current_token().clone();
693        match token {
694            Token::Number(n) => {
695                self.advance();
696                Ok(Expression::Literal(Literal::Number(n)))
697            }
698            Token::String(s) => {
699                self.advance();
700                Ok(Expression::Literal(Literal::String(s)))
701            }
702            Token::TemplateLiteral(s) => {
703                self.advance();
704                // Create a simple template literal with one quasi
705                let template = TemplateLiteral {
706                    quasis: vec![TemplateElement {
707                        value: s,
708                        tail: true,
709                    }],
710                    expressions: vec![],
711                };
712                Ok(Expression::Template(template))
713            }
714            Token::Boolean(b) => {
715                self.advance();
716                Ok(Expression::Literal(Literal::Boolean(b)))
717            }
718            Token::Null => {
719                self.advance();
720                Ok(Expression::Literal(Literal::Null))
721            }
722            Token::Undefined => {
723                self.advance();
724                Ok(Expression::Literal(Literal::Undefined))
725            }
726            Token::Keyword(crate::lexer::Keyword::Null) => {
727                self.advance();
728                Ok(Expression::Literal(Literal::Null))
729            }
730            Token::Keyword(crate::lexer::Keyword::Undefined) => {
731                self.advance();
732                Ok(Expression::Literal(Literal::Undefined))
733            }
734            Token::Identifier(name) => {
735                self.advance();
736                Ok(Expression::Identifier(name))
737            }
738            Token::Keyword(crate::lexer::Keyword::This) => {
739                self.advance();
740                Ok(Expression::This(ThisExpression))
741            }
742            Token::Keyword(crate::lexer::Keyword::Super) => {
743                self.advance();
744                Ok(Expression::Super(SuperExpression))
745            }
746            Token::Keyword(crate::lexer::Keyword::New) => {
747                self.advance();
748                let callee = self.parse_primary_expression()?;
749                let arguments = if self.current_token() == &Token::LeftParen {
750                    self.advance(); // consume '('
751                    let args = self.parse_arguments()?;
752                    self.expect_token(&Token::RightParen)?;
753                    args
754                } else {
755                    Vec::new()
756                };
757                Ok(Expression::New(NewExpression {
758                    callee: Box::new(callee),
759                    arguments,
760                }))
761            }
762            Token::LeftParen => {
763                // Look ahead to see if this is an arrow function
764                let mut pos = self.position + 1;
765                let mut paren_count = 1;
766                
767                // Skip to matching closing paren
768                while pos < self.tokens.len() && paren_count > 0 {
769                    match &self.tokens[pos] {
770                        Token::LeftParen => paren_count += 1,
771                        Token::RightParen => paren_count -= 1,
772                        _ => {}
773                    }
774                    pos += 1;
775                }
776                
777                // Check if next token is arrow
778                if pos < self.tokens.len() && self.tokens[pos] == Token::Arrow {
779                    // This is an arrow function
780                    self.advance(); // consume (
781                    let parameters = self.parse_parameter_list()?;
782                    self.expect_token(&Token::RightParen)?;
783                    self.expect_token(&Token::Arrow)?;
784                    let body = if self.current_token() == &Token::LeftBrace {
785                        self.parse_block_statement()?
786                    } else {
787                        let expr = self.parse_expression()?;
788                        Statement::ExpressionStatement(ExpressionStatement {
789                            expression: expr,
790                        })
791                    };
792                    
793                    Ok(Expression::Arrow(Box::new(ArrowFunctionExpression {
794                        type_parameters: Vec::new(),
795                        parameters,
796                        return_type: None,
797                        body: Box::new(body),
798                    })))
799                } else {
800                    // Regular parenthesized expression
801                    self.advance();
802                    let expression = self.parse_expression()?;
803                    self.expect_token(&Token::RightParen)?;
804                    Ok(Expression::Parenthesized(ParenthesizedExpression {
805                        expression: Box::new(expression),
806                    }))
807                }
808            }
809            Token::LeftBrace => self.parse_object_expression(),
810            Token::LeftBracket => self.parse_array_expression(),
811            _ => Err(CompilerError::parse_error(
812                self.position,
813                0,
814                format!("Unexpected token: {:?}", self.current_token()),
815            )),
816        }
817    }
818
819    /// Parse object expression
820    fn parse_object_expression(&mut self) -> Result<Expression> {
821        self.expect_token(&Token::LeftBrace)?;
822        let mut properties = Vec::new();
823
824        while self.current_token() != &Token::RightBrace {
825            let key = self.parse_property_key()?;
826            let value = if self.current_token() == &Token::Colon {
827                self.advance();
828                self.parse_expression()?
829            } else {
830                key.clone()
831            };
832
833            properties.push(ObjectProperty {
834                key,
835                value,
836                shorthand: false,
837                computed: false,
838                method: false,
839            });
840
841            if self.current_token() == &Token::Comma {
842                self.advance();
843            }
844        }
845
846        self.expect_token(&Token::RightBrace)?;
847        Ok(Expression::Object(ObjectExpression { properties }))
848    }
849
850    /// Parse array expression
851    fn parse_array_expression(&mut self) -> Result<Expression> {
852        self.expect_token(&Token::LeftBracket)?;
853        let mut elements = Vec::new();
854
855        while self.current_token() != &Token::RightBracket {
856            if self.current_token() == &Token::Comma {
857                self.advance();
858                elements.push(None);
859            } else {
860                elements.push(Some(self.parse_expression()?));
861                if self.current_token() == &Token::Comma {
862                    self.advance();
863                }
864            }
865        }
866
867        self.expect_token(&Token::RightBracket)?;
868        Ok(Expression::Array(ArrayExpression { elements }))
869    }
870
871    /// Parse type
872    fn parse_type(&mut self) -> Result<Type> {
873        let mut left_type = self.parse_primary_type()?;
874        
875        // Handle union and intersection types
876        while matches!(self.current_token(), Token::Union | Token::Intersection) {
877            let operator = self.current_token().clone();
878            self.advance();
879            let right_type = self.parse_primary_type()?;
880            
881            left_type = match operator {
882                Token::Union => Type::Union {
883                    left: Box::new(left_type),
884                    right: Box::new(right_type),
885                },
886                Token::Intersection => Type::Intersection {
887                    left: Box::new(left_type),
888                    right: Box::new(right_type),
889                },
890                _ => return Err(CompilerError::parse_error(
891                    1,
892                    1,
893                    "Expected union or intersection operator",
894                )),
895            };
896        }
897        
898        // Handle array types: T[]
899        while self.current_token() == &Token::LeftBracket {
900            self.advance(); // consume [
901            self.expect_token(&Token::RightBracket)?; // consume ]
902            left_type = Type::Array(Box::new(left_type));
903        }
904        
905        Ok(left_type)
906    }
907    
908    fn parse_primary_type(&mut self) -> Result<Type> {
909        let token = self.current_token().clone();
910        match token {
911            Token::Keyword(crate::lexer::Keyword::String) => {
912                self.advance();
913                Ok(Type::String)
914            }
915            Token::Keyword(crate::lexer::Keyword::Number) => {
916                self.advance();
917                Ok(Type::Number)
918            }
919            Token::Keyword(crate::lexer::Keyword::Boolean) => {
920                self.advance();
921                Ok(Type::Boolean)
922            }
923            Token::Keyword(crate::lexer::Keyword::Any) => {
924                self.advance();
925                Ok(Type::Any)
926            }
927            Token::Keyword(crate::lexer::Keyword::Void) => {
928                self.advance();
929                Ok(Type::Void)
930            }
931            Token::Keyword(crate::lexer::Keyword::Never) => {
932                self.advance();
933                Ok(Type::Never)
934            }
935            Token::Keyword(crate::lexer::Keyword::Unknown) => {
936                self.advance();
937                Ok(Type::Unknown)
938            }
939            Token::Keyword(crate::lexer::Keyword::Array) => {
940                self.advance();
941                if self.current_token() == &Token::LessThan {
942                    self.advance(); // consume <
943                    let element_type = self.parse_primary_type()?;
944                    self.expect_token(&Token::GreaterThan)?;
945                    Ok(Type::Array(Box::new(element_type)))
946                } else {
947                    Ok(Type::Array(Box::new(Type::Any)))
948                }
949            }
950            Token::Keyword(crate::lexer::Keyword::Readonly) => {
951                self.advance();
952                // Parse the type that follows readonly
953                let element_type = self.parse_primary_type()?;
954                // For now, just return the element type (readonly is handled at runtime)
955                Ok(element_type)
956            }
957            Token::Keyword(crate::lexer::Keyword::Keyof) => {
958                self.advance();
959                let _target_type = self.parse_type()?;
960                // For now, return string as keyof T resolves to string
961                Ok(Type::String)
962            }
963            Token::Keyword(crate::lexer::Keyword::Key) => {
964                self.advance();
965                Ok(Type::String) // Key -> string for now
966            }
967            Token::Keyword(crate::lexer::Keyword::Infer) => {
968                self.advance();
969                Ok(Type::Any) // infer -> any for now
970            }
971            Token::Keyword(crate::lexer::Keyword::Null) => {
972                self.advance();
973                Ok(Type::Null) // null -> null for now
974            }
975            Token::Keyword(crate::lexer::Keyword::Undefined) => {
976                self.advance();
977                Ok(Type::Undefined) // undefined -> undefined for now
978            }
979            Token::Identifier(name) => {
980                self.advance();
981                // Check for indexed access type: T[K]
982                if self.current_token() == &Token::LeftBracket {
983                    self.advance(); // consume [
984                    let _index_type = self.parse_type()?;
985                    self.expect_token(&Token::RightBracket)?;
986                    // For now, return the base type (indexed access is handled at runtime)
987                    Ok(Type::Named(name.to_string()))
988                } else if self.current_token() == &Token::LessThan {
989                    let type_parameters = self.parse_type_parameters()?;
990                    Ok(Type::GenericNamed {
991                        name: name.to_string(),
992                        type_parameters,
993                    })
994                } else {
995                    Ok(Type::Named(name.to_string()))
996                }
997            }
998            Token::String(s) => {
999                self.advance();
1000                // String literal type
1001                Ok(Type::Named(format!("\"{}\"", s)))
1002            }
1003            Token::Number(n) => {
1004                self.advance();
1005                // Number literal type
1006                Ok(Type::Named(n.to_string()))
1007            }
1008            Token::LeftParen => {
1009                self.advance();
1010                let type_ = self.parse_type()?;
1011                self.expect_token(&Token::RightParen)?;
1012                Ok(type_)
1013            }
1014       Token::LeftBrace => {
1015           // Parse object type: { prop: type; ... } or mapped type { [P in K]: T }
1016           self.advance(); // consume {
1017           let mut members = Vec::new();
1018
1019           while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
1020               // Check if this is a mapped type: [P in K] or index signature: [key: type]
1021               if self.current_token() == &Token::LeftBracket {
1022                   // Look ahead to determine if this is a mapped type or index signature
1023                   let mut pos = self.position + 1; // skip [
1024                   let mut is_mapped_type = false;
1025                   
1026                   // Look for 'in' keyword to distinguish mapped type from index signature
1027                   while pos < self.tokens.len() && self.tokens[pos] != Token::RightBracket {
1028                       if self.tokens[pos] == Token::Keyword(Keyword::In) {
1029                           is_mapped_type = true;
1030                           break;
1031                       }
1032                       pos += 1;
1033                   }
1034                   
1035                   if is_mapped_type {
1036                       let mapped_type = self.parse_mapped_type()?;
1037                       members.push(ObjectTypeMember::Property(PropertySignature {
1038                           name: mapped_type.type_parameter.name.clone(),
1039                           optional: false,
1040                           type_: Some(*mapped_type.type_.clone()),
1041                           readonly: mapped_type.readonly.unwrap_or(false),
1042                       }));
1043                       // parse_mapped_type already handles semicolon, so continue to next iteration
1044                       continue;
1045                   } else {
1046                       // This is an index signature, parse it as such
1047                       let index_sig = self.parse_index_signature()?;
1048                       members.push(ObjectTypeMember::Index(index_sig));
1049                       if self.current_token() == &Token::Semicolon {
1050                           self.advance();
1051                       }
1052                       continue;
1053                   }
1054               } else {
1055                   // Check for readonly modifier
1056                   let readonly = if self.current_token() == &Token::Keyword(Keyword::Readonly) {
1057                       self.advance(); // consume readonly
1058                       true
1059                   } else {
1060                       false
1061                   };
1062
1063                   let name = self.expect_identifier()?;
1064                   let optional = if self.current_token() == &Token::QuestionMark {
1065                       self.advance();
1066                       true
1067                   } else {
1068                       false
1069                   };
1070                   self.expect_token(&Token::Colon)?;
1071                   let type_ = self.parse_type()?;
1072
1073                   members.push(ObjectTypeMember::Property(PropertySignature {
1074                       name,
1075                       optional,
1076                       type_: Some(type_),
1077                       readonly,
1078                   }));
1079               }
1080
1081               if self.current_token() == &Token::Semicolon {
1082                   self.advance();
1083               }
1084           }
1085
1086           self.expect_token(&Token::RightBrace)?;
1087           Ok(Type::ObjectType(ObjectType { members }))
1088       }
1089            _ => Err(CompilerError::parse_error(
1090                self.position,
1091                0,
1092                format!("Unexpected token in type: {:?}", self.current_token()),
1093            )),
1094        }
1095    }
1096
1097    // Helper methods
1098    fn current_token(&self) -> &Token {
1099        &self.tokens[self.position]
1100    }
1101
1102    fn advance(&mut self) {
1103        if self.position < self.tokens.len() {
1104            self.position += 1;
1105        }
1106    }
1107
1108    fn expect_token(&mut self, expected: &Token) -> Result<()> {
1109        if self.current_token() == expected {
1110            self.advance();
1111            Ok(())
1112        } else {
1113            Err(CompilerError::parse_error(
1114                self.position,
1115                0,
1116                format!("Expected {:?}, found {:?}", expected, self.current_token()),
1117            ))
1118        }
1119    }
1120
1121    fn expect_keyword(&mut self) -> Result<crate::lexer::Keyword> {
1122        if let Token::Keyword(keyword) = self.current_token() {
1123            let keyword = keyword.clone();
1124            self.advance();
1125            Ok(keyword)
1126        } else {
1127            Err(CompilerError::parse_error(
1128                self.position,
1129                0,
1130                format!("Expected keyword, found {:?}", self.current_token()),
1131            ))
1132        }
1133    }
1134
1135    fn expect_identifier(&mut self) -> Result<String> {
1136        if let Token::Identifier(name) = self.current_token() {
1137            let name = name.clone();
1138            self.advance();
1139            Ok(name)
1140        } else {
1141            Err(CompilerError::parse_error(
1142                self.position,
1143                0,
1144                format!("Expected identifier, found {:?}", self.current_token()),
1145            ))
1146        }
1147    }
1148
1149    fn expect_semicolon(&mut self) -> Result<()> {
1150        self.expect_token(&Token::Semicolon)
1151    }
1152
1153    fn parse_string_literal(&mut self) -> Result<String> {
1154        if let Token::String(s) = self.current_token() {
1155            let s = s.clone();
1156            self.advance();
1157            Ok(s)
1158        } else {
1159            Err(CompilerError::parse_error(
1160                self.position,
1161                0,
1162                format!("Expected string literal, found {:?}", self.current_token()),
1163            ))
1164        }
1165    }
1166
1167    fn is_assignment_operator(&self) -> bool {
1168        matches!(
1169            self.current_token(),
1170            Token::Assign
1171                | Token::PlusAssign
1172                | Token::MinusAssign
1173                | Token::MultiplyAssign
1174                | Token::DivideAssign
1175        )
1176    }
1177
1178    fn is_equality_operator(&self) -> bool {
1179        matches!(
1180            self.current_token(),
1181            Token::Equal | Token::NotEqual | Token::StrictEqual | Token::StrictNotEqual
1182        )
1183    }
1184
1185    fn is_relational_operator(&self) -> bool {
1186        matches!(
1187            self.current_token(),
1188            Token::LessThan | Token::GreaterThan | Token::LessEqual | Token::GreaterEqual
1189        )
1190    }
1191
1192    fn is_additive_operator(&self) -> bool {
1193        matches!(self.current_token(), Token::Plus | Token::Minus)
1194    }
1195
1196    fn is_multiplicative_operator(&self) -> bool {
1197        matches!(
1198            self.current_token(),
1199            Token::Multiply | Token::Divide | Token::Modulo
1200        )
1201    }
1202
1203    fn is_unary_operator(&self) -> bool {
1204        matches!(
1205            self.current_token(),
1206            Token::Plus | Token::Minus | Token::Not | Token::Keyword(crate::lexer::Keyword::Typeof)
1207        )
1208    }
1209
1210    fn is_postfix_operator(&self) -> bool {
1211        matches!(
1212            self.current_token(),
1213            Token::LeftParen | Token::LeftBracket | Token::Dot
1214        )
1215    }
1216
1217    // Placeholder methods for complex parsing
1218    fn parse_type_parameters(&mut self) -> Result<Vec<TypeParameter>> {
1219        if self.current_token() == &Token::LessThan {
1220            self.advance();
1221            let mut type_parameters = Vec::new();
1222
1223            while self.current_token() != &Token::GreaterThan {
1224                let name = self.expect_identifier()?;
1225                let constraint =
1226                    if self.current_token() == &Token::Keyword(crate::lexer::Keyword::Extends) {
1227                        self.advance();
1228                        Some(self.parse_type()?)
1229                    } else {
1230                        None
1231                    };
1232
1233                let default_type = if self.current_token() == &Token::Assign {
1234                    self.advance();
1235                    Some(self.parse_type()?)
1236                } else {
1237                    None
1238                };
1239
1240                type_parameters.push(TypeParameter {
1241                    name,
1242                    constraint: constraint.map(Box::new),
1243                    default: default_type.map(Box::new),
1244                });
1245
1246                if self.current_token() == &Token::Comma {
1247                    self.advance();
1248                }
1249            }
1250
1251            self.expect_token(&Token::GreaterThan)?;
1252            Ok(type_parameters)
1253        } else {
1254            Ok(Vec::new())
1255        }
1256    }
1257
1258    fn parse_parameters(&mut self) -> Result<Vec<Parameter>> {
1259        self.expect_token(&Token::LeftParen)?;
1260        let mut parameters = Vec::new();
1261
1262        while self.current_token() != &Token::RightParen {
1263            // Handle access modifiers on parameters (TypeScript feature)
1264            let mut _modifiers = Vec::new();
1265            while let Token::Keyword(keyword) = self.current_token() {
1266                match keyword {
1267                    crate::lexer::Keyword::Public | 
1268                    crate::lexer::Keyword::Private | 
1269                    crate::lexer::Keyword::Protected | 
1270                    crate::lexer::Keyword::Readonly => {
1271                        _modifiers.push(keyword.clone());
1272                        self.advance();
1273                    }
1274                    _ => break,
1275                }
1276            }
1277            
1278            let name = self.expect_identifier()?;
1279            let optional = if self.current_token() == &Token::QuestionMark {
1280                self.advance();
1281                true
1282            } else {
1283                false
1284            };
1285
1286            let type_annotation = if self.current_token() == &Token::Colon {
1287                self.advance();
1288                Some(self.parse_type()?)
1289            } else {
1290                None
1291            };
1292
1293            let initializer = if self.current_token() == &Token::Assign {
1294                self.advance();
1295                Some(self.parse_expression()?)
1296            } else {
1297                None
1298            };
1299
1300            parameters.push(Parameter {
1301                name,
1302                optional,
1303                type_: type_annotation.map(Box::new),
1304                initializer,
1305                rest: false,
1306            });
1307
1308            if self.current_token() == &Token::Comma {
1309                self.advance();
1310            }
1311        }
1312
1313        self.expect_token(&Token::RightParen)?;
1314        Ok(parameters)
1315    }
1316    
1317    fn parse_parameter_list(&mut self) -> Result<Vec<Parameter>> {
1318        let mut parameters = Vec::new();
1319
1320        while self.current_token() != &Token::RightParen {
1321            // Handle access modifiers on parameters (TypeScript feature)
1322            let mut _modifiers = Vec::new();
1323            while let Token::Keyword(keyword) = self.current_token() {
1324                match keyword {
1325                    crate::lexer::Keyword::Public | 
1326                    crate::lexer::Keyword::Private | 
1327                    crate::lexer::Keyword::Protected | 
1328                    crate::lexer::Keyword::Readonly => {
1329                        _modifiers.push(keyword.clone());
1330                        self.advance();
1331                    }
1332                    _ => break,
1333                }
1334            }
1335            
1336            let name = self.expect_identifier()?;
1337            let optional = if self.current_token() == &Token::QuestionMark {
1338                self.advance();
1339                true
1340            } else {
1341                false
1342            };
1343
1344            let type_annotation = if self.current_token() == &Token::Colon {
1345                self.advance();
1346                Some(self.parse_type()?)
1347            } else {
1348                None
1349            };
1350
1351            let initializer = if self.current_token() == &Token::Assign {
1352                self.advance();
1353                Some(self.parse_expression()?)
1354            } else {
1355                None
1356            };
1357
1358            parameters.push(Parameter {
1359                name,
1360                optional,
1361                type_: type_annotation.map(Box::new),
1362                initializer,
1363                rest: false,
1364            });
1365
1366            if self.current_token() == &Token::Comma {
1367                self.advance();
1368            }
1369        }
1370
1371        Ok(parameters)
1372    }
1373
1374    fn parse_implements(&mut self) -> Result<Vec<Type>> {
1375        if self.current_token() == &Token::Keyword(crate::lexer::Keyword::Implements) {
1376            self.advance();
1377            let mut types = Vec::new();
1378
1379            loop {
1380                let type_ = self.parse_type()?;
1381                types.push(type_);
1382
1383                if self.current_token() == &Token::Comma {
1384                    self.advance();
1385                } else {
1386                    break;
1387                }
1388            }
1389
1390            Ok(types)
1391        } else {
1392            Ok(Vec::new())
1393        }
1394    }
1395
1396    fn parse_extends(&mut self) -> Result<Vec<Type>> {
1397        let mut extends = Vec::new();
1398        
1399        if self.current_token() == &Token::Keyword(crate::lexer::Keyword::Extends) {
1400            self.advance(); // consume 'extends'
1401            
1402            // Parse the first extended type
1403            let type_ = self.parse_type()?;
1404            extends.push(type_);
1405            
1406            // Parse additional extended types (comma-separated)
1407            while self.current_token() == &Token::Comma {
1408                self.advance(); // consume ','
1409                let type_ = self.parse_type()?;
1410                extends.push(type_);
1411            }
1412        }
1413        
1414        Ok(extends)
1415    }
1416
1417    fn parse_class_body(&mut self) -> Result<ClassBody> {
1418        self.expect_token(&Token::LeftBrace)?;
1419        let mut members = Vec::new();
1420
1421        while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
1422            let member = self.parse_class_member()?;
1423            members.push(member);
1424        }
1425
1426        self.expect_token(&Token::RightBrace)?;
1427        Ok(ClassBody { members })
1428    }
1429
1430    fn parse_interface_body(&mut self) -> Result<InterfaceBody> {
1431        self.expect_token(&Token::LeftBrace)?;
1432        let mut members = Vec::new();
1433
1434        while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
1435            let member = self.parse_interface_member()?;
1436            members.push(member);
1437        }
1438        self.expect_token(&Token::RightBrace)?;
1439        Ok(InterfaceBody { members })
1440    }
1441
1442    fn parse_enum_members(&mut self) -> Result<Vec<EnumMember>> {
1443        self.expect_token(&Token::LeftBrace)?;
1444        let mut members = Vec::new();
1445
1446        while self.current_token() != &Token::RightBrace && self.current_token() != &Token::EOF {
1447            let member = self.parse_enum_member()?;
1448            members.push(member);
1449
1450            if self.current_token() == &Token::Comma {
1451                self.advance();
1452            }
1453        }
1454
1455        self.expect_token(&Token::RightBrace)?;
1456        Ok(members)
1457    }
1458
1459    fn parse_import_specifiers(&mut self) -> Result<Vec<ImportSpecifier>> {
1460        let mut specifiers = Vec::new();
1461
1462        if self.current_token() == &Token::LeftBrace {
1463            self.advance(); // consume '{'
1464
1465            while self.current_token() != &Token::RightBrace {
1466                let name = self.expect_identifier()?;
1467                specifiers.push(ImportSpecifier::Named(NamedImportSpecifier {
1468                    imported: name.clone(),
1469                    name,
1470                }));
1471
1472                if self.current_token() == &Token::Comma {
1473                    self.advance();
1474                }
1475            }
1476
1477            self.expect_token(&Token::RightBrace)?; // consume '}'
1478        } else {
1479            // Default import
1480            let name = self.expect_identifier()?;
1481            specifiers.push(ImportSpecifier::Default(DefaultImportSpecifier { name }));
1482        }
1483
1484        Ok(specifiers)
1485    }
1486
1487    fn parse_arguments(&mut self) -> Result<Vec<Expression>> {
1488        let mut arguments = Vec::new();
1489
1490        while self.current_token() != &Token::RightParen {
1491            let argument = self.parse_expression()?;
1492            arguments.push(argument);
1493
1494            if self.current_token() == &Token::Comma {
1495                self.advance();
1496            } else if self.current_token() != &Token::RightParen {
1497                return Err(CompilerError::parse_error(
1498                    1,
1499                    1,
1500                    "Expected comma or closing parenthesis".to_string(),
1501                ));
1502            }
1503        }
1504
1505        Ok(arguments)
1506    }
1507
1508    fn parse_class_member(&mut self) -> Result<ClassMember> {
1509        let mut modifiers = Vec::new();
1510        
1511        // Parse access modifiers
1512        while let Token::Keyword(keyword) = self.current_token() {
1513            match keyword {
1514                crate::lexer::Keyword::Public => {
1515                    modifiers.push(crate::ast::Modifier::Public);
1516                    self.advance();
1517                }
1518                crate::lexer::Keyword::Private => {
1519                    modifiers.push(crate::ast::Modifier::Private);
1520                    self.advance();
1521                }
1522                crate::lexer::Keyword::Protected => {
1523                    modifiers.push(crate::ast::Modifier::Protected);
1524                    self.advance();
1525                }
1526                crate::lexer::Keyword::Readonly => {
1527                    modifiers.push(crate::ast::Modifier::Readonly);
1528                    self.advance();
1529                }
1530                crate::lexer::Keyword::Static => {
1531                    modifiers.push(crate::ast::Modifier::Static);
1532                    self.advance();
1533                }
1534                _ => break,
1535            }
1536        }
1537
1538        let token = self.current_token().clone();
1539
1540        match token {
1541            Token::Keyword(crate::lexer::Keyword::Get) => {
1542                self.advance();
1543                let name = if let Token::Identifier(name) = self.current_token() {
1544                    let name = name.clone();
1545                    self.advance();
1546                    name
1547                } else {
1548                    return Err(CompilerError::parse_error(
1549                        1,
1550                        1,
1551                        "Expected getter name".to_string(),
1552                    ));
1553                };
1554
1555                // Handle getter parameters (empty parentheses)
1556                if self.current_token() == &Token::LeftParen {
1557                    self.advance(); // consume '('
1558                    self.expect_token(&Token::RightParen)?; // consume ')'
1559                }
1560
1561                let return_type = if self.current_token() == &Token::Colon {
1562                    self.advance();
1563                    Some(self.parse_type()?)
1564                } else {
1565                    None
1566                };
1567                let body = if self.current_token() == &Token::LeftBrace {
1568                    self.parse_block_statement()?
1569                } else {
1570                    return Err(CompilerError::parse_error(
1571                        1,
1572                        1,
1573                        "Expected block statement for getter".to_string(),
1574                    ));
1575                };
1576
1577                Ok(ClassMember::Getter(GetterDeclaration {
1578                    name,
1579                    type_: return_type,
1580                    body: Some(body),
1581                    modifiers,
1582                }))
1583            }
1584            Token::Keyword(crate::lexer::Keyword::Set) => {
1585                self.advance();
1586                let name = if let Token::Identifier(name) = self.current_token() {
1587                    let name = name.clone();
1588                    self.advance();
1589                    name
1590                } else {
1591                    return Err(CompilerError::parse_error(
1592                        1,
1593                        1,
1594                        "Expected setter name".to_string(),
1595                    ));
1596                };
1597
1598                let parameter = if self.current_token() == &Token::LeftParen {
1599                    self.advance(); // consume '('
1600                    let name = self.expect_identifier()?;
1601                    self.expect_token(&Token::Colon)?;
1602                    let type_annotation = self.parse_type()?;
1603                    self.expect_token(&Token::RightParen)?; // consume ')'
1604                    
1605                    Parameter {
1606                        name,
1607                        optional: false,
1608                        type_: Some(Box::new(type_annotation)),
1609                        initializer: None,
1610                        rest: false,
1611                    }
1612                } else {
1613                    return Err(CompilerError::parse_error(
1614                        1,
1615                        1,
1616                        "Expected setter parameter".to_string(),
1617                    ));
1618                };
1619
1620                let body = if self.current_token() == &Token::LeftBrace {
1621                    self.parse_block_statement()?
1622                } else {
1623                    return Err(CompilerError::parse_error(
1624                        1,
1625                        1,
1626                        "Expected block statement for setter".to_string(),
1627                    ));
1628                };
1629
1630                Ok(ClassMember::Setter(SetterDeclaration {
1631                    name,
1632                    parameter,
1633                    body: Some(body),
1634                    modifiers,
1635                }))
1636            }
1637            Token::Identifier(name) => {
1638                self.advance();
1639
1640                // Special handling for constructor
1641                if name == "constructor" {
1642                    // It's a constructor
1643                    let parameters = self.parse_parameters()?;
1644                    let body = self.parse_block_statement()?;
1645
1646                    Ok(ClassMember::Constructor(ConstructorDeclaration {
1647                        parameters,
1648                        body: Some(body),
1649                        modifiers,
1650                    }))
1651                } else if self.current_token() == &Token::LeftParen {
1652                    // It's a method
1653                    let parameters = self.parse_parameters()?;
1654                    let return_type = if self.current_token() == &Token::Colon {
1655                        self.advance();
1656                        Some(self.parse_type()?)
1657                    } else {
1658                        None
1659                    };
1660                    let body = self.parse_block_statement()?;
1661
1662                    Ok(ClassMember::Method(MethodDeclaration {
1663                        name,
1664                        optional: false,
1665                        type_parameters: Vec::new(),
1666                        parameters,
1667                        return_type,
1668                        body: Some(body),
1669                        modifiers,
1670                    }))
1671                } else if self.current_token() == &Token::Colon {
1672                    // It's a property
1673                    self.advance();
1674                    let type_annotation = self.parse_type()?;
1675                    
1676                    let initializer = if self.current_token() == &Token::Assign {
1677                        self.advance();
1678                        Some(self.parse_expression()?)
1679                    } else {
1680                        None
1681                    };
1682                    
1683                    self.expect_token(&Token::Semicolon)?;
1684
1685                    Ok(ClassMember::Property(PropertyDeclaration {
1686                        name,
1687                        optional: false,
1688                        type_: Some(type_annotation),
1689                        initializer,
1690                        modifiers,
1691                    }))
1692                } else {
1693                    // It's a constructor
1694                    if name == "constructor" {
1695                        let parameters = self.parse_parameters()?;
1696                        let body = self.parse_block_statement()?;
1697
1698                        Ok(ClassMember::Constructor(ConstructorDeclaration {
1699                            parameters,
1700                            body: Some(body),
1701                            modifiers: Vec::new(),
1702                        }))
1703                    } else {
1704                        // If we can't parse as class member, try to skip the token
1705                        self.advance();
1706                        Err(CompilerError::parse_error(
1707                            self.position - 1,
1708                            1,
1709                            "Unexpected class member, skipping token".to_string(),
1710                        ))
1711                    }
1712                }
1713            }
1714            _ => {
1715                // If we can't parse as class member, try to skip the token
1716                self.advance();
1717                Err(CompilerError::parse_error(
1718                    self.position - 1,
1719                    1,
1720                    "Expected class member, skipping token".to_string(),
1721                ))
1722            }
1723        }
1724    }
1725
1726    fn parse_interface_member(&mut self) -> Result<ObjectTypeMember> {
1727        let mut readonly = false;
1728        
1729        // Check for readonly modifier
1730        if let Token::Keyword(crate::lexer::Keyword::Readonly) = self.current_token() {
1731            readonly = true;
1732            self.advance();
1733            
1734            // Check if the next token is also 'readonly' (property name)
1735            if let Token::Keyword(crate::lexer::Keyword::Readonly) = self.current_token() {
1736                // Handle case where readonly is both modifier and property name: readonly readonly: boolean;
1737                let name = "readonly".to_string();
1738                self.advance(); // consume the property name 'readonly'
1739                
1740                if self.current_token() == &Token::Colon {
1741                    // It's a property signature
1742                    self.advance();
1743                    let type_annotation = self.parse_type()?;
1744                    self.expect_token(&Token::Semicolon)?;
1745
1746                    return Ok(ObjectTypeMember::Property(PropertySignature {
1747                        name,
1748                        optional: false,
1749                        type_: Some(type_annotation),
1750                        readonly,
1751                    }));
1752                } else {
1753                    return Err(CompilerError::parse_error(
1754                        1, 1,
1755                        "Expected colon after property name".to_string(),
1756                    ));
1757                }
1758            }
1759        }
1760        
1761        let token = self.current_token().clone();
1762
1763        match token {
1764            Token::LeftParen => {
1765                // It's a call signature: (x: number, y: number): number;
1766                let parameters = self.parse_parameters()?;
1767                let return_type = if self.current_token() == &Token::Colon {
1768                    self.advance();
1769                    Some(self.parse_type()?)
1770                } else {
1771                    None
1772                };
1773                self.expect_token(&Token::Semicolon)?;
1774
1775                Ok(ObjectTypeMember::Method(MethodSignature {
1776                    name: "call".to_string(), // Use a default name for call signatures
1777                    optional: false,
1778                    type_parameters: Vec::new(),
1779                    parameters,
1780                    return_type,
1781                }))
1782            }
1783            Token::Keyword(crate::lexer::Keyword::New) => {
1784                // It's a construct signature: new (name: string): BasicInterface;
1785                self.advance(); // consume 'new'
1786                let parameters = self.parse_parameters()?;
1787                let return_type = if self.current_token() == &Token::Colon {
1788                    self.advance();
1789                    Some(self.parse_type()?)
1790                } else {
1791                    None
1792                };
1793                self.expect_token(&Token::Semicolon)?;
1794
1795                Ok(ObjectTypeMember::Method(MethodSignature {
1796                    name: "constructor".to_string(), // Use a default name for construct signatures
1797                    optional: false,
1798                    type_parameters: Vec::new(),
1799                    parameters,
1800                    return_type,
1801                }))
1802            }
1803            Token::Keyword(crate::lexer::Keyword::Readonly) => {
1804                // Handle case where readonly is the property name (without modifier)
1805                let name = "readonly".to_string();
1806                self.advance();
1807                
1808                if self.current_token() == &Token::Colon {
1809                    // It's a property signature
1810                    self.advance();
1811                    let type_annotation = self.parse_type()?;
1812                    self.expect_token(&Token::Semicolon)?;
1813
1814                    Ok(ObjectTypeMember::Property(PropertySignature {
1815                        name,
1816                        optional: false,
1817                        type_: Some(type_annotation),
1818                        readonly,
1819                    }))
1820                } else {
1821                    Err(CompilerError::parse_error(
1822                        1, 1,
1823                        "Expected colon after property name".to_string(),
1824                    ))
1825                }
1826            }
1827            Token::Identifier(name) => {
1828                self.advance();
1829                
1830                // Check for optional marker
1831                let optional = if self.current_token() == &Token::QuestionMark {
1832                    self.advance();
1833                    true
1834                } else {
1835                    false
1836                };
1837
1838                if self.current_token() == &Token::LeftParen {
1839                    // It's a method signature
1840                    let parameters = self.parse_parameters()?;
1841                    let return_type = if self.current_token() == &Token::Colon {
1842                        self.advance();
1843                        Some(self.parse_type()?)
1844                    } else {
1845                        None
1846                    };
1847                    self.expect_token(&Token::Semicolon)?;
1848
1849                    Ok(ObjectTypeMember::Method(MethodSignature {
1850                        name,
1851                        optional,
1852                        type_parameters: Vec::new(),
1853                        parameters,
1854                        return_type,
1855                    }))
1856                } else if self.current_token() == &Token::Colon {
1857                    // It's a property signature
1858                    self.advance();
1859                    let type_annotation = self.parse_type()?;
1860                    self.expect_token(&Token::Semicolon)?;
1861
1862                    Ok(ObjectTypeMember::Property(PropertySignature {
1863                        name,
1864                        optional,
1865                        type_: Some(type_annotation),
1866                        readonly,
1867                    }))
1868                } else {
1869                    Err(CompilerError::parse_error(
1870                        1,
1871                        1,
1872                        "Expected method or property signature".to_string(),
1873                    ))
1874                }
1875            }
1876            Token::LeftBracket => {
1877                // It's an index signature: [key: string]: any;
1878                self.advance(); // consume '['
1879                let key_name = match self.current_token() {
1880                    Token::Identifier(name) => {
1881                        let name = name.clone();
1882                        self.advance();
1883                        name
1884                    }
1885                    Token::Keyword(crate::lexer::Keyword::Key) => {
1886                        self.advance();
1887                        "key".to_string()
1888                    }
1889                    _ => return Err(CompilerError::parse_error(
1890                        1, 1,
1891                        "Expected identifier or 'key' in index signature".to_string(),
1892                    ))
1893                };
1894                self.expect_token(&Token::Colon)?;
1895                let key_type = self.parse_type()?;
1896                self.expect_token(&Token::RightBracket)?;
1897                self.expect_token(&Token::Colon)?;
1898                let value_type = self.parse_type()?;
1899                self.expect_token(&Token::Semicolon)?;
1900
1901                Ok(ObjectTypeMember::Index(IndexSignature {
1902                    parameter: Box::new(Parameter {
1903                        name: key_name,
1904                        type_: Some(Box::new(key_type)),
1905                        optional: false,
1906                        initializer: None,
1907                        rest: false,
1908                    }),
1909                    type_: value_type,
1910                    readonly: false,
1911                }))
1912            }
1913            _ => Err(CompilerError::parse_error(
1914                1,
1915                1,
1916                "Expected interface member".to_string(),
1917            )),
1918        }
1919    }
1920
1921    fn parse_enum_member(&mut self) -> Result<EnumMember> {
1922        let name = self.expect_identifier()?;
1923
1924        let initializer = if self.current_token() == &Token::Assign {
1925            self.advance();
1926            Some(self.parse_expression()?)
1927        } else {
1928            None
1929        };
1930
1931        Ok(EnumMember { name, initializer })
1932    }
1933
1934    fn parse_if_statement(&mut self) -> Result<Statement> {
1935        self.expect_keyword()?; // if
1936
1937        self.expect_token(&Token::LeftParen)?;
1938        let test = self.parse_expression()?;
1939        self.expect_token(&Token::RightParen)?;
1940
1941        let consequent = self.parse_statement()?.unwrap();
1942
1943        let alternate = if self.current_token() == &Token::Keyword(crate::lexer::Keyword::Else) {
1944            self.advance();
1945            Some(self.parse_statement()?.unwrap())
1946        } else {
1947            None
1948        };
1949
1950        Ok(Statement::IfStatement(Box::new(IfStatement {
1951            condition: test,
1952            consequent: Box::new(consequent),
1953            alternate,
1954        })))
1955    }
1956
1957    fn parse_property_key(&mut self) -> Result<Expression> {
1958        // TODO: Implement property key parsing
1959        self.parse_expression()
1960    }
1961
1962    /// Parse index signature: [key: type]: returnType
1963    fn parse_index_signature(&mut self) -> Result<IndexSignature> {
1964        self.expect_token(&Token::LeftBracket)?;
1965        
1966        let key_name = match self.current_token() {
1967            Token::Identifier(name) => {
1968                let name = name.clone();
1969                self.advance();
1970                name
1971            }
1972            Token::Keyword(Keyword::Key) => {
1973                self.advance();
1974                "key".to_string()
1975            }
1976            _ => {
1977                return Err(CompilerError::parse_error(
1978                    self.position,
1979                    0,
1980                    format!("Expected identifier or 'key', found {:?}", self.current_token()),
1981                ));
1982            }
1983        };
1984        
1985        self.expect_token(&Token::Colon)?;
1986        let key_type = self.parse_type()?;
1987        self.expect_token(&Token::RightBracket)?;
1988        self.expect_token(&Token::Colon)?;
1989        let value_type = self.parse_type()?;
1990        
1991        Ok(IndexSignature {
1992            parameter: Box::new(Parameter {
1993                name: key_name,
1994                type_: Some(Box::new(key_type)),
1995                optional: false,
1996                initializer: None,
1997                rest: false,
1998            }),
1999            type_: value_type,
2000            readonly: false,
2001        })
2002    }
2003
2004    /// Parse mapped type: [P in K] or [P in keyof T]
2005    fn parse_mapped_type(&mut self) -> Result<MappedType> {
2006        // Parse [P in K]: T
2007        self.expect_token(&Token::LeftBracket)?;
2008        
2009        let type_parameter_name = match self.current_token() {
2010            Token::Identifier(name) => {
2011                let name = name.clone();
2012                self.advance();
2013                name
2014            }
2015            Token::Keyword(Keyword::Key) => {
2016                self.advance();
2017                "Key".to_string()
2018            }
2019            _ => {
2020                return Err(CompilerError::parse_error(
2021                    self.position,
2022                    0,
2023                    format!("Expected identifier or Key, found {:?}", self.current_token()),
2024                ));
2025            }
2026        };
2027        let type_parameter = TypeParameter {
2028            name: type_parameter_name.clone(),
2029            constraint: None,
2030            default: None,
2031        };
2032
2033        // Expect 'in' keyword
2034        if self.current_token() == &Token::Keyword(Keyword::In) {
2035            self.advance();
2036        } else {
2037            return Err(CompilerError::parse_error(
2038                self.position,
2039                0,
2040                format!("Expected 'in', found {:?}", self.current_token()),
2041            ));
2042        }
2043        
2044        let constraint_type = self.parse_type()?;
2045        
2046        self.expect_token(&Token::RightBracket)?;
2047        self.expect_token(&Token::Colon)?;
2048        
2049        let value_type = self.parse_type()?;
2050        
2051        // Skip semicolon if present (it's optional in mapped types)
2052        if self.current_token() == &Token::Semicolon {
2053            self.advance();
2054        }
2055        
2056        Ok(MappedType {
2057            type_parameter: Box::new(type_parameter),
2058            constraint: Some(Box::new(constraint_type)),
2059            name_type: None,
2060            type_: Box::new(value_type),
2061            readonly: None,
2062            optional: None,
2063        })
2064    }
2065}