From 2b053f5b4613a986a505932ca2c018367f76dd8f Mon Sep 17 00:00:00 2001 From: polsevev Date: Wed, 15 May 2024 21:11:52 +0200 Subject: [PATCH] Almost finito, just missing adding the * --- dsl_files/do.jstql | 4 ++-- src/parser/parse.ts | 2 +- src/parser/preludeBuilder.ts | 32 +++++++++++++------------------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/dsl_files/do.jstql b/dsl_files/do.jstql index 8d1d3df..9da176a 100644 --- a/dsl_files/do.jstql +++ b/dsl_files/do.jstql @@ -2,7 +2,7 @@ proposal DoExpression{ pair arrowFunction{ applicable to { "let <> = () => { - <> + <> return <>; } " @@ -18,7 +18,7 @@ proposal DoExpression{ pair immediatelyInvokedUnnamedFunction { applicable to { "let <> = function(){ - <> + <> return <>; }();" } diff --git a/src/parser/parse.ts b/src/parser/parse.ts index a523312..b26c1b0 100644 --- a/src/parser/parse.ts +++ b/src/parser/parse.ts @@ -118,7 +118,7 @@ export interface GroupExpr extends WildcardNode { expr: TypeExpr; } -class WildcardParser { +export class WildcardParser { private position = -1; constructor(private tokens: WildcardToken[]) {} diff --git a/src/parser/preludeBuilder.ts b/src/parser/preludeBuilder.ts index 5fa701c..a24b69d 100644 --- a/src/parser/preludeBuilder.ts +++ b/src/parser/preludeBuilder.ts @@ -1,14 +1,15 @@ -import { InternalDSLVariable, parse_with_plugins } from "./parse"; +import { Wildcard, WildcardParser, parse_with_plugins } from "./parse"; import * as t from "@babel/types"; +import { WildcardTokenizer } from "./wildcardTokenizer"; export function preludeBuilder(prelude: string) { let parsedPrelude = parse_with_plugins(prelude).program.body; return extractValues(parsedPrelude); } -function extractValues(types: t.Statement[]): InternalDSLVariable { - let prelude: InternalDSLVariable = {}; +function extractValues(types: t.Statement[]): Wildcard[] { + let prelude: Wildcard[] = []; for (let stmt of types) { if (stmt.type == "VariableDeclaration") { stmt = stmt; @@ -16,22 +17,15 @@ function extractValues(types: t.Statement[]): InternalDSLVariable { let innerDSLVariableName = (declaration.id as t.Identifier).name; let init = declaration.init; if (init) { - if (init.type == "ArrayExpression") { - init = init; - let temp = []; - for (let elem of init.elements) { - if (elem && elem.type == "Identifier") { - temp.push(elem.name); - } else { - throw new Error( - "Usage of non variable declaration in Prelude Array" - ); - } - } - prelude[innerDSLVariableName] = temp; - } else if (init.type === "Identifier") { - init = init; - prelude[innerDSLVariableName] = [init.name]; + if (init.type == "StringLiteral") { + init = init; + prelude.push( + new WildcardParser( + new WildcardTokenizer( + innerDSLVariableName + ":" + init + ).tokenize() + ).parse() + ); } else { throw new Error( "Invalid usage of right side declaration in prelude"