@@ -277,7 +277,27 @@ def _parse_fallback(self, code: str) -> ProgramNode:
277277 statements .append (ReturnNode (value = value ))
278278 i += 1
279279 continue
280-
280+ # Detect standalone function calls
281+ func_call_match = re .match (r'^([A-Za-z_]\w*)\s*\((.*)\)\s*$' , stripped )
282+ if func_call_match :
283+ func_name = func_call_match .group (1 )
284+ args_str = func_call_match .group (2 )
285+
286+ # Optional: ensure it's not a keyword accidentally matched
287+ if func_name .lower () not in {"if" , "for" , "while" , "return" , "print" , "function" }:
288+ args = self ._parse_argument_list (args_str )
289+
290+ call_node = FunctionCallNode (
291+ function_name = func_name ,
292+ arguments = args
293+ )
294+
295+ statements .append (
296+ ExpressionStatementNode (expression = call_node )
297+ )
298+
299+ i += 1
300+ continue
281301 # Skip unknown lines
282302 i += 1
283303
@@ -650,7 +670,27 @@ def _parse_block_fallback(self, lines: List[str], indent_unit: int) -> BlockNode
650670 statements .append (AssignmentNode (target = target , value = value ))
651671 i += 1
652672 continue
653-
673+ # Detect standalone function calls
674+ func_call_match = re .match (r'^([A-Za-z_]\w*)\s*\((.*)\)\s*$' , stripped )
675+ if func_call_match :
676+ func_name = func_call_match .group (1 )
677+ args_str = func_call_match .group (2 )
678+
679+ # Optional: ensure it's not a keyword accidentally matched
680+ if func_name .lower () not in {"if" , "for" , "while" , "return" , "print" , "function" }:
681+ args = self ._parse_argument_list (args_str )
682+
683+ call_node = FunctionCallNode (
684+ function_name = func_name ,
685+ arguments = args
686+ )
687+
688+ statements .append (
689+ ExpressionStatementNode (expression = call_node )
690+ )
691+
692+ i += 1
693+ continue
654694 # Unknown statement - skip
655695 i += 1
656696
0 commit comments