python2igcse
Version:
Convert Python code to IGCSE Pseudocode format
114 lines • 2.53 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 IGCSE Pseudocode reserved words
*/
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';
}
/**
* Helper function for type inference
*/
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