Charm_15 / code_generate.py
GeminiFan207's picture
Create code_generate.py
cff74af verified
from typing import Dict, List, Optional
import random
class CodeGenerator:
"""A class to generate function code in multiple programming languages."""
# Supported languages and their templates with proper indentation
TEMPLATES: Dict[str, str] = {
"python": "def {func_name}({params}):\n {body}",
"javascript": "function {func_name}({params}) {{\n {body}\n}}",
"cpp": "{ret_type} {func_name}({params}) {{\n {body}\n}}",
"java": "public class Main {{\n public static {ret_type} {func_name}({params}) {{\n {body}\n }}\n}}",
"csharp": "public class Program {{\n public static {ret_type} {func_name}({params}) {{\n {body}\n }}\n}}"
}
# Configuration data
FUNCTION_NAMES: List[str] = ["calculate", "processData", "computeValue", "generateOutput"]
DEFAULT_PARAMS: Dict[str, str] = {
"python": "x: int, y: int",
"javascript": "x, y",
"cpp": "int x, int y",
"java": "int x, int y",
"csharp": "int x, int y"
}
RETURN_TYPES: Dict[str, str] = {
"cpp": "int",
"java": "int",
"csharp": "int",
"python": " -> int", # Type hint for Python
"javascript": "" # No explicit return type
}
DEFAULT_BODY: str = "return x + y;"
def __init__(self, seed: Optional[int] = None):
"""Initialize generator with optional random seed."""
if seed is not None:
random.seed(seed)
def get_supported_languages(self) -> List[str]:
"""Return list of supported languages."""
return list(self.TEMPLATES.keys())
def generate_code(
self,
language: str,
func_name: Optional[str] = None,
params: Optional[str] = None,
body: Optional[str] = None,
ret_type: Optional[str] = None
) -> Optional[str]:
"""
Generate code for the specified language with customizable components.
Args:
language: Target programming language
func_name: Optional custom function name
params: Optional custom parameters
body: Optional custom function body
ret_type: Optional custom return type
Returns:
Generated code string or None if language is unsupported
"""
if language not in self.TEMPLATES:
return None
# Use provided values or defaults
selected_func_name = func_name or random.choice(self.FUNCTION_NAMES)
selected_params = params or self.DEFAULT_PARAMS.get(language, "")
selected_body = self._normalize_body(body or self.DEFAULT_BODY, language)
selected_ret_type = ret_type or self.RETURN_TYPES.get(language, "")
try:
return self.TEMPLATES[language].format(
func_name=selected_func_name,
params=selected_params,
body=selected_body,
ret_type=selected_ret_type
)
except KeyError as e:
raise ValueError(f"Missing template component: {str(e)}")
except Exception as e:
raise RuntimeError(f"Code generation failed: {str(e)}")
def _normalize_body(self, body: str, language: str) -> str:
"""Normalize function body based on language requirements."""
body = body.strip()
if language in {"cpp", "java", "csharp"} and not body.endswith(";"):
return body + ";"
if language == "python":
return body.replace(";", "") # Python doesn't use semicolons
return body
def main():
"""Demonstrate code generation for all supported languages."""
generator = CodeGenerator(seed=42) # Fixed seed for reproducibility
print("Supported languages:", generator.get_supported_languages())
print("\nGenerated code examples:")
for lang in generator.get_supported_languages():
code = generator.generate_code(lang)
print(f"\n{lang.upper()}:\n{code}")
if __name__ == "__main__":
main()