UNPKG

java2ib

Version:

TypeScript library that converts Java code into IB Computer Science pseudocode format

180 lines 7.05 kB
/** * AST Transformation System for converting Java AST to IB Pseudocode AST */ import { ASTNode, NodeType, SourceLocation, ConversionError } from './types'; import { IBRulesEngine, VariableInfo, MethodInfo } from './ib-rules-engine'; export interface PseudocodeNode { type: PseudocodeNodeType; content: string; indentLevel: number; children?: PseudocodeNode[]; location: SourceLocation; } export declare enum PseudocodeNodeType { STATEMENT = "statement", BLOCK = "block", EXPRESSION = "expression", COMMENT = "comment" } export interface TransformationContext { variables: Map<string, VariableInfo>; methods: Map<string, MethodInfo>; currentScope: ScopeInfo; ibRules: IBRulesEngine; indentLevel: number; } export interface ScopeInfo { name: string; type: 'global' | 'class' | 'method' | 'block'; parent?: ScopeInfo; } export interface TransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare abstract class BaseTransformationRule implements TransformationRule { abstract nodeType: NodeType; abstract transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; protected createPseudocodeNode(type: PseudocodeNodeType, content: string, location: SourceLocation, indentLevel?: number, children?: PseudocodeNode[]): PseudocodeNode; protected transformChildren(children: ASTNode[] | undefined, context: TransformationContext): PseudocodeNode[]; } export declare class VariableDeclarationRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private isScannerObject; private isScannerInputMethod; } export declare class AssignmentRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private isScannerObject; private isScannerInputMethod; } export declare class BinaryExpressionRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class IdentifierRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class LiteralRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class IfStatementRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private transformStatementBody; } export declare class WhileLoopRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private transformStatementBody; } export declare class ForLoopRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private isEnhancedForLoop; private extractEnhancedForInfo; private isSimpleCountingLoop; private extractSimpleLoopInfo; private transformStatementBody; } export declare class MethodDeclarationRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class ArrayAccessRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class MethodCallRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private getObjectName; private isStringObject; private isScannerObject; private isScannerInputMethod; } export declare class ProgramRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class ReturnStatementRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class ClassDeclarationRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private findMainMethod; private isMainMethod; private shouldExtractMainMethod; } export declare class ASTTransformer { private rules; private ibRules; private errors; constructor(); private initializeRules; /** * Transform a Java AST into IB Pseudocode AST * @param ast - The Java AST to transform * @returns Transformation result with pseudocode AST, errors, and warnings */ transform(ast: ASTNode): { pseudocodeAST: PseudocodeNode[]; errors: ConversionError[]; warnings: ConversionError[]; }; /** * Transform a single AST node * @param node - The AST node to transform * @param context - The transformation context * @returns Array of pseudocode nodes */ transformNode(node: ASTNode, context: TransformationContext): PseudocodeNode[]; private addError; private addWarning; /** * Create a transformation context for testing * @param ibRules - Optional IBRulesEngine instance * @returns A new transformation context */ createContext(ibRules?: IBRulesEngine): TransformationContext; } declare module './transformer' { interface TransformationContext { transformer: ASTTransformer; } } export declare class SwitchStatementRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class CaseClauseRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class DefaultClauseRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class BreakStatementRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class ContinueStatementRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class EnhancedForLoopRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } export declare class ArrayInitializationRule extends BaseTransformationRule { nodeType: NodeType; transform(node: ASTNode, context: TransformationContext): PseudocodeNode[]; } //# sourceMappingURL=transformer.d.ts.map