python2ib
Version:
Convert Python code to IB Pseudocode format
140 lines • 3.48 kB
TypeScript
/**
* Python AST parser using a simple recursive descent approach
* This is a simplified parser for educational Python constructs
*/
/** Python AST node types */
export interface PythonASTNode {
type: string;
lineno?: number;
col_offset?: number;
[key: string]: any;
}
/** Token types for lexical analysis */
export declare enum TokenType {
NUMBER = "NUMBER",
STRING = "STRING",
IDENTIFIER = "IDENTIFIER",
IF = "IF",
ELIF = "ELIF",
ELSE = "ELSE",
WHILE = "WHILE",
FOR = "FOR",
DEF = "DEF",
RETURN = "RETURN",
PRINT = "PRINT",
INPUT = "INPUT",
IN = "IN",
AND = "AND",
OR = "OR",
NOT = "NOT",
TRUE = "TRUE",
FALSE = "FALSE",
NONE = "NONE",
ASSIGN = "ASSIGN",
PLUS = "PLUS",
MINUS = "MINUS",
MULTIPLY = "MULTIPLY",
DIVIDE = "DIVIDE",
FLOOR_DIVIDE = "FLOOR_DIVIDE",
MODULO = "MODULO",
POWER = "POWER",
EQUAL = "EQUAL",
NOT_EQUAL = "NOT_EQUAL",
LESS = "LESS",
LESS_EQUAL = "LESS_EQUAL",
GREATER = "GREATER",
GREATER_EQUAL = "GREATER_EQUAL",
PLUS_ASSIGN = "PLUS_ASSIGN",
MINUS_ASSIGN = "MINUS_ASSIGN",
MULTIPLY_ASSIGN = "MULTIPLY_ASSIGN",
DIVIDE_ASSIGN = "DIVIDE_ASSIGN",
LPAREN = "LPAREN",
RPAREN = "RPAREN",
LBRACKET = "LBRACKET",
RBRACKET = "RBRACKET",
COMMA = "COMMA",
COLON = "COLON",
DOT = "DOT",
NEWLINE = "NEWLINE",
INDENT = "INDENT",
DEDENT = "DEDENT",
COMMENT = "COMMENT",
EOF = "EOF"
}
/** Token interface */
export interface Token {
type: TokenType;
value: string;
line: number;
column: number;
}
/** Simple lexer for Python code */
export declare class PythonLexer {
private code;
private position;
private line;
private column;
private tokens;
private indentStack;
constructor(code: string);
/** Tokenize the Python code */
tokenize(): Token[];
private advance;
private addToken;
private skipWhitespace;
private handleIndentation;
private readComment;
private readNumber;
private readString;
private readIdentifier;
private isDigit;
private isAlpha;
private isAlphaNumeric;
private getKeywordType;
private getTwoCharOperator;
private getSingleCharOperator;
}
/** Simple AST parser for Python */
export declare class ASTParser {
private tokens;
private current;
/** Parse Python code to AST */
parse(code: string): Promise<PythonASTNode>;
/** Parse Python code to AST synchronously */
parseSync(code: string): PythonASTNode;
private parseProgram;
private parseStatement;
private parseComment;
private parseIf;
private parseWhile;
private parseFor;
private parseFunction;
private parseReturn;
private parsePrint;
private parseAssignmentOrExpression;
private parseExpression;
private parseOr;
private parseAnd;
private parseEquality;
private parseComparison;
private parseTerm;
private parseFactor;
private parseUnary;
private parsePower;
private parseCall;
private finishCall;
private finishSubscript;
private finishAttribute;
private parsePrimary;
/** Parse an indented block of statements */
private parseBlock;
private skipNewlines;
private match;
private check;
private advance;
private isAtEnd;
private peek;
private previous;
private consume;
}
//# sourceMappingURL=ast-parser.d.ts.map