python2igcse
Version:
Convert Python code to IGCSE Pseudocode format
90 lines • 2.36 kB
JavaScript
;
// IGCSE Pseudocode-specific type definitions
Object.defineProperty(exports, "__esModule", { value: true });
exports.PYTHON_TO_IGCSE_TYPES = exports.PYTHON_TO_IGCSE_OPERATORS = void 0;
exports.isIGCSEKeyword = isIGCSEKeyword;
exports.convertOperator = convertOperator;
exports.convertDataType = convertDataType;
exports.inferDataType = inferDataType;
/**
* Mapping from Python operators to IGCSE operators
*/
exports.PYTHON_TO_IGCSE_OPERATORS = {
'=': '←',
'==': '=',
'!=': '≠',
'<': '<',
'>': '>',
'<=': '≤',
'>=': '≥',
'and': 'AND',
'or': 'OR',
'not': 'NOT',
'+': '+',
'-': '-',
'*': '*',
'/': '/',
'%': 'MOD',
'//': 'DIV'
};
/**
* Mapping from Python types to IGCSE types
*/
exports.PYTHON_TO_IGCSE_TYPES = {
'int': 'INTEGER',
'float': 'REAL',
'str': 'STRING',
'bool': 'BOOLEAN',
'list': 'ARRAY',
'dict': 'RECORD'
};
/**
* Check if a word is an IGCSE Pseudocode reserved word
*/
function isIGCSEKeyword(word) {
const keywords = [
'IF', 'THEN', 'ELSE', 'ENDIF',
'FOR', 'TO', 'STEP', 'NEXT',
'WHILE', 'ENDWHILE', 'REPEAT', 'UNTIL',
'PROCEDURE', 'ENDPROCEDURE', 'FUNCTION', 'RETURNS', 'ENDFUNCTION', 'RETURN',
'INPUT', 'OUTPUT',
'CASE', 'OF', 'OTHERWISE', 'ENDCASE',
'TYPE', 'ENDTYPE', 'CLASS', 'ENDCLASS', 'DECLARE',
'CONSTANT', 'ARRAY', 'RECORD'
];
return keywords.includes(word.toUpperCase());
}
/**
* Convert Python operator to IGCSE operator
*/
function convertOperator(pythonOp) {
return exports.PYTHON_TO_IGCSE_OPERATORS[pythonOp] || pythonOp;
}
/**
* Convert Python type to IGCSE type
*/
function convertDataType(pythonType) {
return exports.PYTHON_TO_IGCSE_TYPES[pythonType] || 'STRING';
}
/**
* Type inference helper function
*/
function inferDataType(value) {
if (typeof value === 'number') {
return Number.isInteger(value) ? 'INTEGER' : 'REAL';
}
if (typeof value === 'string') {
return value.length === 1 ? 'CHAR' : 'STRING';
}
if (typeof value === 'boolean') {
return 'BOOLEAN';
}
if (Array.isArray(value)) {
return 'ARRAY';
}
if (typeof value === 'object' && value !== null) {
return 'RECORD';
}
return 'STRING'; // Default
}
//# sourceMappingURL=igcse.js.map