Files
mixly3/boards/default_src/python_mixpy/generators/datastructure.js
2024-07-19 10:16:00 +08:00

176 lines
7.7 KiB
JavaScript

import * as Blockly from 'blockly/core';
export const ds_create_linkedlist = function (_, generator) {
// Create a list with any number of elements of any type.
//var dropdown_type = this.getFieldValue('TYPE');
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'),
Blockly.Variables.NAME_TYPE);
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = 'class ' + typeName + ":\n";
code += ' def __init__(self):\n';
var attr = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
var keyName = this.getFieldValue('KEY' + n);
attr[n] = ' self.' + keyName + " = " + (generator.valueToCode(this, 'ADD' + n, generator.ORDER_NONE) || default_value);
}
code += attr.join('\n') + '\n';
code += ' self.next = None\n';
code += varName + ' = ' + typeName + '()\n'
return code;
}
export const ds_create_node = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
//var size=window.parseFloat(this.getFieldValue('SIZE'));
var code = varName + ' = ' + typeName + '()\n';
return code;
}
export const ds_get_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = varName + '.' + typeName;
return [code, generator.ORDER_ATOMIC];
}
export const ds_set_node_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var argument = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var code = varName + '.' + typeName + ' = ' + argument + '\n';
return code;
}
export const ds_add_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定名称的节点")\n';
}
return code;
}
export const ds_add_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var varName3 = generator.valueToCode(this, 'NODE3', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var direction = this.getFieldValue('DIR');
if (direction == 'after') {
var code = 'now = ' + varName + '\n';
code += 'while now.' + typeName + ' != ' + varName2 + ' and now != None:\n';
code += ' now = now.next\n';
code += 'if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' ' + 'now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += 'else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
if (direction == 'before') {
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName3 + '.next = ' + varName + '\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + "and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' ' + varName3 + '.next = now.next\n';
code += ' now.next = ' + varName3 + '\n';
code += ' print("插入节点成功")\n';
code += ' else:\n'
code += ' print("插入节点失败,未找到指定的节点")\n';
}
return code;
}
export const ds_del_node_by_name = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'if ' + varName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定名称的节点")\n';
return code;
}
export const ds_del_node_by_attr = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'VAR', generator.ORDER_ASSIGNMENT) || '0';
var typeName = generator.variableDB_.getName(this.getFieldValue('TYPE'),
Blockly.Variables.NAME_TYPE);
var code = 'if ' + varName + '.' + typeName + ' == ' + varName2 + ':\n';
code += ' ' + varName + '.next = None\n';
code += 'else:\n'
code += ' now = ' + varName + '\n';
code += ' while now.next.' + typeName + ' != ' + varName2 + " and now.next != None:\n";
code += ' now = now.next\n';
code += ' if now != None:\n'
code += ' now.next = now.next.next\n';
code += ' print("删除节点成功")\n';
code += ' else:\n'
code += ' print("删除节点失败,未找到指定的节点")\n';
return code;
}
export const ds_reverse_linkedlist = function (_, generator) {
var varName = generator.valueToCode(this, 'NODE', generator.ORDER_ASSIGNMENT) || '0';
var varName2 = generator.valueToCode(this, 'NODE2', generator.ORDER_ASSIGNMENT) || '0';
var code = 'ptr = ' + varName + '\n';
code += 'before = None\n';
code += 'while ptr != None:\n'
code += ' last = before\n';
code += ' before = ptr\n';
code += ' ptr = ptr.next\n';
code += ' before.next = last\n'
code += varName2 + ' = before\n';
return code;
}