diff --git a/ast.js b/ast.js deleted file mode 100644 index e69de29..0000000 diff --git a/parse.js b/parse.js index a64e96b..f733cf5 100644 --- a/parse.js +++ b/parse.js @@ -170,6 +170,19 @@ const parseName = (stream) => { return {parsed:id.parsed.val, stream:syn.stream}; } +/* takes in stream, outputs parsed item or null - FAILABLE */ +const parsePush = (stream) => { + let syn = attempt(parseSyntax("'")); + if (syn.parsed === null) { + return {parsed:null, stream:syn.stream}; + } + let id = parseIdent(syn.stream); + if (id.parsed === null) { + return {parsed:null, stream:id.stream}; + } + return {parsed:{type:"push", elem:id.parsed}, stream:id.stream}; +} + /* takes in stream, outputs parsed item or null - FAILABLE */ const parseLambda = (stream) => { let name = attempt(parseName)(stream); @@ -189,7 +202,7 @@ const parseLambda = (stream) => { } /* takes in stream, outputs parsed item or null */ -const parseExpr = or(parseBuiltin, or(parseIdent, or(parseInteger, attempt(parens(parseLambda))))); +const parseExpr = or(parseBuiltin, or(parseIdent, or(parseInteger, or(parsePush, attempt(parens(parseLambda)))))); /* takes in stream, outputs parsed items */ export const parseExprs = many(parseExpr); \ No newline at end of file