Skip to content

Commit 3cc09c2

Browse files
committed
Integración de los Nodos Integradores to int y to float
1 parent be49165 commit 3cc09c2

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

core/translation_rules.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,13 @@ def block_to_code(block: Dict[str, Any], level: int = 0) -> str:
8181
safe_prompt = f"'{prompt}'" if prompt else "''"
8282
return f"{indent}{target} = input({safe_prompt})\n"
8383

84+
# Transformación de Tipos (Casting a Int / Float)
85+
if b_type in ['py_int', 'py_float']:
86+
target = _safe_str(block.get('target', 'res'))
87+
val = _safe_str(block.get('value', '0'))
88+
func = 'int' if b_type == 'py_int' else 'float'
89+
return f"{indent}{target} = {func}({val})\n"
90+
8491
# Comparaciones (Sueltas o para IF)
8592
if b_type == 'py_compare':
8693
# Nota: Normalmente esto iría dentro de un If, pero si está suelto:
@@ -214,6 +221,16 @@ def ast_node_to_block(node: ast.AST) -> Dict[str, Any]:
214221
if isinstance(node.value, ast.Call) and _ast_expr_to_str(node.value.func) == 'input':
215222
prompt = _ast_expr_to_str(node.value.args[0]) if node.value.args else '""'
216223
return {"type": "py_input", "target": target, "prompt": prompt}
224+
225+
if isinstance(node.value, ast.Call):
226+
func_name = _ast_expr_to_str(node.value.func)
227+
if func_name in ['int', 'float']:
228+
arg_val = _ast_expr_to_str(node.value.args[0]) if node.value.args else '0'
229+
return {
230+
"type": f"py_{func_name}",
231+
"target": target,
232+
"value": arg_val
233+
}
217234
# Math
218235
if isinstance(node.value, ast.BinOp):
219236
return {

web/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ <h2 className="text-white font-bold flex items-center gap-2">
453453
py_return: ({ data, id }) => <BaseNode title="Return" icon={ArrowLeft} color="bg-rose-600"><input name="value" placeholder="val" className="node-input nodrag" value={data.value||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></BaseNode>,
454454
py_control: ({ data, id }) => <BaseNode title="Control" icon={XCircle} color="bg-red-800"><select name="control_type" className="node-input nodrag" value={data.control_type||'break'} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})}><option value="break">Break</option><option value="continue">Continue</option><option value="pass">Pass</option></select></BaseNode>,
455455
py_input: ({ data, id }) => <BaseNode title="Input" icon={Keyboard} color="bg-slate-600"><input name="prompt" placeholder="msg" className="node-input nodrag mb-1" value={data.prompt||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /><input name="target" placeholder="var" className="node-input nodrag" value={data.target||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></BaseNode>,
456+
py_int: ({ data, id }) => <BaseNode title="To Integer" icon={Code} color="bg-pink-700"><div className="flex gap-1 items-center mb-1"><span className="text-xs font-mono">int(</span><input name="value" placeholder="var" className="node-input nodrag w-16" value={data.value||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /><span className="text-xs font-mono">)</span></div><div className="flex items-center gap-1"><span className="text-xs">Save:</span><input name="target" placeholder="res" className="node-input nodrag" value={data.target||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></div></BaseNode>,
457+
py_float: ({ data, id }) => <BaseNode title="To Decimal" icon={Code} color="bg-pink-600"><div className="flex gap-1 items-center mb-1"><span className="text-xs font-mono">float(</span><input name="value" placeholder="var" className="node-input nodrag w-16" value={data.value||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /><span className="text-xs font-mono">)</span></div><div className="flex items-center gap-1"><span className="text-xs">Save:</span><input name="target" placeholder="res" className="node-input nodrag" value={data.target||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></div></BaseNode>,
456458
py_class: ({ data, id }) => <BaseNode title="Class" icon={Box} color="bg-indigo-700"><input name="name" placeholder="Name" className="node-input nodrag mb-1" value={data.name||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /><input name="bases" placeholder="Inherits" className="node-input nodrag" value={data.bases||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></BaseNode>,
457459
py_import: ({ data, id }) => <BaseNode title="Import" icon={Package} color="bg-sky-700"><div className="flex gap-1 mb-1"><span className="text-xs">from</span><input name="from" className="node-input nodrag" value={data.from||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></div><div className="flex gap-1"><span className="text-xs">import</span><input name="names" className="node-input nodrag" value={data.names||''} onChange={e=>data.onChange(id, {...data, [e.target.name]: e.target.value})} /></div></BaseNode>,
458460
py_try: ({ data, id }) => <BaseNode title="Try/Except" icon={AlertTriangle} color="bg-amber-600"><div className="text-xs text-gray-300">Errors handled below</div></BaseNode>
@@ -1115,6 +1117,8 @@ <h3 className="text-red-400 font-bold uppercase text-xs mb-3 flex items-center g
11151117
<div className="flex-1 overflow-y-auto p-2 space-y-1">
11161118
<SidebarBtn label="Variable" icon={Variable} color="text-yellow-400" nodeType="py_var" onDragStart={onDragStart} />
11171119
<SidebarBtn label="Input" icon={Keyboard} color="text-slate-400" nodeType="py_input" onDragStart={onDragStart} />
1120+
<SidebarBtn label="To Int (Entero)" icon={Code} color="text-pink-500" nodeType="py_int" onDragStart={onDragStart} />
1121+
<SidebarBtn label="To Float (Decimal)" icon={Code} color="text-pink-400" nodeType="py_float" onDragStart={onDragStart} />
11181122
<SidebarBtn label="Print" icon={Terminal} color="text-gray-400" nodeType="py_print" onDragStart={onDragStart} />
11191123
<div className="my-2 border-t border-gray-800"></div>
11201124
<SidebarBtn label="If" icon={Split} color="text-orange-400" nodeType="py_if" onDragStart={onDragStart} />

0 commit comments

Comments
 (0)