pearc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // Pear Language MCP Server
4
+ // Exposes pear_to_c, c_to_pear, and pear_compile tools via MCP stdio transport
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
7
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
8
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
9
+ const compiler_1 = require("./compiler");
10
+ const interpreter_1 = require("./interpreter");
11
+ // ─── Tool Definitions ─────────────────────────────────────────────────────────
12
+ const TOOLS = [
13
+ {
14
+ name: 'pear_to_c',
15
+ description: 'Compile Pear source code to C source code. Pear is an ultra-minified low-level language that transpiles to C.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ code: {
20
+ type: 'string',
21
+ description: 'Pear source code to compile',
22
+ },
23
+ },
24
+ required: ['code'],
25
+ },
26
+ },
27
+ {
28
+ name: 'c_to_pear',
29
+ description: 'Decompile/minify C source code to Pear source code. Best-effort transformation that replaces types, keywords, and converts declarations.',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ code: {
34
+ type: 'string',
35
+ description: 'C source code to decompile to Pear',
36
+ },
37
+ },
38
+ required: ['code'],
39
+ },
40
+ },
41
+ {
42
+ name: 'pear_run',
43
+ description: 'Interpret and run Pear source code directly in Node.js without a C compiler. Returns the output as a string.',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ code: {
48
+ type: 'string',
49
+ description: 'Pear source code to interpret and run',
50
+ },
51
+ args: {
52
+ type: 'array',
53
+ items: { type: 'string' },
54
+ description: 'Command-line arguments to pass to the program',
55
+ },
56
+ stdin: {
57
+ type: 'string',
58
+ description: 'Optional stdin input for the program',
59
+ },
60
+ },
61
+ required: ['code'],
62
+ },
63
+ },
64
+ {
65
+ name: 'pear_compile',
66
+ description: 'Compile Pear source code all the way to a binary executable using gcc or clang. Writes the output binary to the specified path.',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ code: {
71
+ type: 'string',
72
+ description: 'Pear source code to compile to binary',
73
+ },
74
+ output_file: {
75
+ type: 'string',
76
+ description: 'Output file path for the compiled binary',
77
+ },
78
+ compiler: {
79
+ type: 'string',
80
+ description: 'C compiler to use (gcc, clang, etc.). Defaults to auto-detect.',
81
+ },
82
+ flags: {
83
+ type: 'array',
84
+ items: { type: 'string' },
85
+ description: 'Additional compiler flags. Defaults to ["-std=c99", "-Wall", "-O2"].',
86
+ },
87
+ },
88
+ required: ['code', 'output_file'],
89
+ },
90
+ },
91
+ ];
92
+ // ─── Server Setup ─────────────────────────────────────────────────────────────
93
+ const server = new index_js_1.Server({
94
+ name: 'pear-lang',
95
+ version: '0.1.0',
96
+ }, {
97
+ capabilities: {
98
+ tools: {},
99
+ },
100
+ });
101
+ // List tools handler
102
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
103
+ return { tools: TOOLS };
104
+ });
105
+ // Call tool handler
106
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
107
+ const { name, arguments: args } = request.params;
108
+ switch (name) {
109
+ case 'pear_run': {
110
+ const code = args?.code;
111
+ const runArgs = args?.args ?? [];
112
+ const stdinData = args?.stdin;
113
+ if (!code) {
114
+ return {
115
+ content: [{ type: 'text', text: 'Error: code parameter is required' }],
116
+ isError: true,
117
+ };
118
+ }
119
+ try {
120
+ const interp = new interpreter_1.Interpreter({ captureOutput: true, stdin: stdinData });
121
+ const result = interp.run(code, runArgs);
122
+ const text = JSON.stringify({
123
+ exitCode: result.exitCode,
124
+ stdout: result.stdout,
125
+ stderr: result.stderr,
126
+ }, null, 2);
127
+ return { content: [{ type: 'text', text }] };
128
+ }
129
+ catch (err) {
130
+ return {
131
+ content: [{ type: 'text', text: `Runtime error: ${err}` }],
132
+ isError: true,
133
+ };
134
+ }
135
+ }
136
+ case 'pear_to_c': {
137
+ const code = args?.code;
138
+ if (!code) {
139
+ return {
140
+ content: [{ type: 'text', text: 'Error: code parameter is required' }],
141
+ isError: true,
142
+ };
143
+ }
144
+ try {
145
+ const cCode = (0, compiler_1.pearToC)(code);
146
+ return {
147
+ content: [{ type: 'text', text: cCode }],
148
+ };
149
+ }
150
+ catch (err) {
151
+ return {
152
+ content: [{ type: 'text', text: `Compilation error: ${err}` }],
153
+ isError: true,
154
+ };
155
+ }
156
+ }
157
+ case 'c_to_pear': {
158
+ const code = args?.code;
159
+ if (!code) {
160
+ return {
161
+ content: [{ type: 'text', text: 'Error: code parameter is required' }],
162
+ isError: true,
163
+ };
164
+ }
165
+ try {
166
+ const pearCode = (0, compiler_1.cToPear)(code);
167
+ return {
168
+ content: [{ type: 'text', text: pearCode }],
169
+ };
170
+ }
171
+ catch (err) {
172
+ return {
173
+ content: [{ type: 'text', text: `Decompilation error: ${err}` }],
174
+ isError: true,
175
+ };
176
+ }
177
+ }
178
+ case 'pear_compile': {
179
+ const code = args?.code;
180
+ const outputFile = args?.output_file;
181
+ const compiler = args?.compiler;
182
+ const flags = args?.flags;
183
+ if (!code || !outputFile) {
184
+ return {
185
+ content: [{ type: 'text', text: 'Error: code and output_file parameters are required' }],
186
+ isError: true,
187
+ };
188
+ }
189
+ const result = (0, compiler_1.compileToBinary)(code, outputFile, {
190
+ compiler,
191
+ flags,
192
+ });
193
+ if (result.success) {
194
+ return {
195
+ content: [{
196
+ type: 'text',
197
+ text: `Successfully compiled to binary: ${outputFile}\n\nGenerated C code:\n${result.output}`,
198
+ }],
199
+ };
200
+ }
201
+ else {
202
+ return {
203
+ content: [{
204
+ type: 'text',
205
+ text: `Compilation failed: ${result.error}\n\nGenerated C code:\n${result.output}`,
206
+ }],
207
+ isError: true,
208
+ };
209
+ }
210
+ }
211
+ default:
212
+ return {
213
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
214
+ isError: true,
215
+ };
216
+ }
217
+ });
218
+ // ─── Start Server ─────────────────────────────────────────────────────────────
219
+ async function main() {
220
+ const transport = new stdio_js_1.StdioServerTransport();
221
+ await server.connect(transport);
222
+ // Server runs until stdin closes
223
+ }
224
+ main().catch((err) => {
225
+ console.error('MCP server error:', err);
226
+ process.exit(1);
227
+ });
228
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,307 @@
1
+ import { Token } from './lexer';
2
+ export type ASTNode = Program | IncludeDirective | DefineDirective | PragmaDirective | IncludeGuardStart | IncludeGuardEnd | RawPreprocessor | FunctionDecl | StructDecl | UnionDecl | EnumDecl | TypedefDecl | VarDecl | BlockStmt | IfStmt | ForStmt | WhileStmt | DoWhileStmt | SwitchStmt | CaseStmt | DefaultStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt | LabelStmt | ExprStmt | Expr;
3
+ export interface Program {
4
+ kind: 'Program';
5
+ body: ASTNode[];
6
+ }
7
+ export interface IncludeDirective {
8
+ kind: 'IncludeDirective';
9
+ path: string;
10
+ }
11
+ export interface DefineDirective {
12
+ kind: 'DefineDirective';
13
+ name: string;
14
+ params: string[] | null;
15
+ body: string;
16
+ }
17
+ export interface PragmaDirective {
18
+ kind: 'PragmaDirective';
19
+ value: string;
20
+ }
21
+ export interface IncludeGuardStart {
22
+ kind: 'IncludeGuardStart';
23
+ name: string;
24
+ }
25
+ export interface IncludeGuardEnd {
26
+ kind: 'IncludeGuardEnd';
27
+ }
28
+ export interface RawPreprocessor {
29
+ kind: 'RawPreprocessor';
30
+ text: string;
31
+ }
32
+ export interface TypeNode {
33
+ base: string;
34
+ pointers: number;
35
+ isConst: boolean;
36
+ isVolatile: boolean;
37
+ isStatic: boolean;
38
+ isExtern: boolean;
39
+ isInline: boolean;
40
+ arraySize: Expr | null;
41
+ }
42
+ export interface ParamDecl {
43
+ name: string;
44
+ type: TypeNode;
45
+ isVararg?: boolean;
46
+ }
47
+ export interface FunctionDecl {
48
+ kind: 'FunctionDecl';
49
+ name: string;
50
+ params: ParamDecl[];
51
+ returnType: TypeNode;
52
+ body: BlockStmt | null;
53
+ qualifiers: string[];
54
+ }
55
+ export interface StructDecl {
56
+ kind: 'StructDecl';
57
+ name: string | null;
58
+ fields: FieldDecl[];
59
+ isTypedef: boolean;
60
+ typedefName: string | null;
61
+ }
62
+ export interface UnionDecl {
63
+ kind: 'UnionDecl';
64
+ name: string | null;
65
+ fields: FieldDecl[];
66
+ isTypedef: boolean;
67
+ typedefName: string | null;
68
+ }
69
+ export interface FieldDecl {
70
+ name: string;
71
+ type: TypeNode;
72
+ bitfield?: Expr;
73
+ }
74
+ export interface EnumDecl {
75
+ kind: 'EnumDecl';
76
+ name: string | null;
77
+ members: EnumMember[];
78
+ isTypedef: boolean;
79
+ typedefName: string | null;
80
+ }
81
+ export interface EnumMember {
82
+ name: string;
83
+ value: Expr | null;
84
+ }
85
+ export interface TypedefDecl {
86
+ kind: 'TypedefDecl';
87
+ inner: ASTNode;
88
+ alias: string;
89
+ }
90
+ export interface VarDecl {
91
+ kind: 'VarDecl';
92
+ name: string;
93
+ type: TypeNode;
94
+ init: Expr | null;
95
+ qualifiers: string[];
96
+ }
97
+ export interface BlockStmt {
98
+ kind: 'BlockStmt';
99
+ body: ASTNode[];
100
+ }
101
+ export interface IfStmt {
102
+ kind: 'IfStmt';
103
+ condition: Expr;
104
+ consequent: ASTNode;
105
+ alternate: ASTNode | null;
106
+ }
107
+ export interface ForStmt {
108
+ kind: 'ForStmt';
109
+ init: ASTNode | null;
110
+ condition: Expr | null;
111
+ update: Expr | null;
112
+ body: ASTNode;
113
+ }
114
+ export interface WhileStmt {
115
+ kind: 'WhileStmt';
116
+ condition: Expr;
117
+ body: ASTNode;
118
+ }
119
+ export interface DoWhileStmt {
120
+ kind: 'DoWhileStmt';
121
+ body: ASTNode;
122
+ condition: Expr;
123
+ }
124
+ export interface SwitchStmt {
125
+ kind: 'SwitchStmt';
126
+ expr: Expr;
127
+ body: ASTNode;
128
+ }
129
+ export interface CaseStmt {
130
+ kind: 'CaseStmt';
131
+ value: Expr;
132
+ body: ASTNode[];
133
+ }
134
+ export interface DefaultStmt {
135
+ kind: 'DefaultStmt';
136
+ body: ASTNode[];
137
+ }
138
+ export interface ReturnStmt {
139
+ kind: 'ReturnStmt';
140
+ value: Expr | null;
141
+ }
142
+ export interface BreakStmt {
143
+ kind: 'BreakStmt';
144
+ }
145
+ export interface ContinueStmt {
146
+ kind: 'ContinueStmt';
147
+ }
148
+ export interface GotoStmt {
149
+ kind: 'GotoStmt';
150
+ label: string;
151
+ }
152
+ export interface LabelStmt {
153
+ kind: 'LabelStmt';
154
+ label: string;
155
+ body: ASTNode;
156
+ }
157
+ export interface ExprStmt {
158
+ kind: 'ExprStmt';
159
+ expr: Expr;
160
+ }
161
+ export type Expr = NumberLiteral | StringLiteral | CharLiteral | BoolLiteral | NullLiteral | Identifier | BinaryExpr | UnaryExpr | PostfixExpr | AssignExpr | TernaryExpr | CallExpr | IndexExpr | MemberExpr | CastExpr | SizeofExpr | InitListExpr | FuncPtrExpr;
162
+ export interface NumberLiteral {
163
+ kind: 'NumberLiteral';
164
+ value: string;
165
+ }
166
+ export interface StringLiteral {
167
+ kind: 'StringLiteral';
168
+ value: string;
169
+ }
170
+ export interface CharLiteral {
171
+ kind: 'CharLiteral';
172
+ value: string;
173
+ }
174
+ export interface BoolLiteral {
175
+ kind: 'BoolLiteral';
176
+ value: boolean;
177
+ }
178
+ export interface NullLiteral {
179
+ kind: 'NullLiteral';
180
+ }
181
+ export interface Identifier {
182
+ kind: 'Identifier';
183
+ name: string;
184
+ }
185
+ export interface BinaryExpr {
186
+ kind: 'BinaryExpr';
187
+ op: string;
188
+ left: Expr;
189
+ right: Expr;
190
+ }
191
+ export interface UnaryExpr {
192
+ kind: 'UnaryExpr';
193
+ op: string;
194
+ operand: Expr;
195
+ prefix: boolean;
196
+ }
197
+ export interface PostfixExpr {
198
+ kind: 'PostfixExpr';
199
+ op: string;
200
+ operand: Expr;
201
+ }
202
+ export interface AssignExpr {
203
+ kind: 'AssignExpr';
204
+ op: string;
205
+ left: Expr;
206
+ right: Expr;
207
+ }
208
+ export interface TernaryExpr {
209
+ kind: 'TernaryExpr';
210
+ condition: Expr;
211
+ consequent: Expr;
212
+ alternate: Expr;
213
+ }
214
+ export interface CallExpr {
215
+ kind: 'CallExpr';
216
+ callee: Expr;
217
+ args: Expr[];
218
+ }
219
+ export interface IndexExpr {
220
+ kind: 'IndexExpr';
221
+ object: Expr;
222
+ index: Expr;
223
+ }
224
+ export interface MemberExpr {
225
+ kind: 'MemberExpr';
226
+ object: Expr;
227
+ member: string;
228
+ arrow: boolean;
229
+ }
230
+ export interface CastExpr {
231
+ kind: 'CastExpr';
232
+ targetType: TypeNode;
233
+ expr: Expr;
234
+ }
235
+ export interface SizeofExpr {
236
+ kind: 'SizeofExpr';
237
+ operand: Expr | TypeNode;
238
+ isType: boolean;
239
+ }
240
+ export interface InitListExpr {
241
+ kind: 'InitListExpr';
242
+ elements: Expr[];
243
+ }
244
+ export interface FuncPtrExpr {
245
+ kind: 'FuncPtrExpr';
246
+ name: string;
247
+ params: ParamDecl[];
248
+ returnType: TypeNode;
249
+ }
250
+ declare const PEAR_TYPE_MAP: Record<string, string>;
251
+ export { PEAR_TYPE_MAP };
252
+ export declare class Parser {
253
+ private tokens;
254
+ private pos;
255
+ constructor(tokens: Token[]);
256
+ private peek;
257
+ private advance;
258
+ private check;
259
+ private eat;
260
+ private tryEat;
261
+ private eatIdent;
262
+ private parseQualifiers;
263
+ private parseType;
264
+ parse(): Program;
265
+ private parseTopLevel;
266
+ private parseInclude;
267
+ private parseDefine;
268
+ private parseTypedef;
269
+ private parseStructDecl;
270
+ private parseUnionDecl;
271
+ private parseFieldDecl;
272
+ private parseEnumDecl;
273
+ private parseFunctionDecl;
274
+ private parseVarOrFuncDecl;
275
+ private parseVarDecl;
276
+ private parseStatement;
277
+ private isIdentLike;
278
+ private isTypeToken;
279
+ private isTypeStartToken;
280
+ private parseBlock;
281
+ private parseIf;
282
+ private parseFor;
283
+ private parseWhile;
284
+ private parseDoWhile;
285
+ private parseSwitch;
286
+ private parseReturn;
287
+ private parseGoto;
288
+ private parseInitList;
289
+ private parseExpr;
290
+ private parseAssignment;
291
+ private parseTernary;
292
+ private parseOr;
293
+ private parseAnd;
294
+ private parseBitOr;
295
+ private parseBitXor;
296
+ private parseBitAnd;
297
+ private parseEquality;
298
+ private parseRelational;
299
+ private parseShift;
300
+ private parseAddSub;
301
+ private parseMulDiv;
302
+ private parseUnary;
303
+ private parsePostfix;
304
+ private parsePrimary;
305
+ }
306
+ export declare function parse(source: string): Program;
307
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}