diff --git a/src/utils/latl/grammar.js b/src/utils/latl/grammar.js index dfdbb2c..f4a7ef8 100644 --- a/src/utils/latl/grammar.js +++ b/src/utils/latl/grammar.js @@ -73,12 +73,6 @@ var grammar = { : t), ) }, - {"name": "setAlias", "symbols": [(lexer.has("comma") ? {type: "comma"} : comma), "_", (lexer.has("setIdentifier") ? {type: "setIdentifier"} : setIdentifier)], "postprocess": pipe( - d => d && d.length ? d.filter(t => !!t) : d, - d => d.map(t => t.type === 'setIdentifier' ? t.toString() : null), - d => d.filter(t => !!t), - d => ({type: 'alias', alias: d }), - ) }, {"name": "setExpression", "symbols": [(lexer.has("openSquareBracket") ? {type: "openSquareBracket"} : openSquareBracket), "_", "phoneList", "_", (lexer.has("closeSquareBracket") ? {type: "closeSquareBracket"} : closeSquareBracket)]}, {"name": "setExpression$ebnf$1$subexpression$1", "symbols": ["setOperation"]}, {"name": "setExpression$ebnf$1", "symbols": ["setExpression$ebnf$1$subexpression$1"], "postprocess": id}, @@ -90,6 +84,12 @@ var grammar = { d => d.map(t => t.map(u => u[0])), flag('setExpression') ) }, + {"name": "setAlias", "symbols": [(lexer.has("comma") ? {type: "comma"} : comma), "_", (lexer.has("setIdentifier") ? {type: "setIdentifier"} : setIdentifier)], "postprocess": pipe( + d => d && d.length ? d.filter(t => !!t) : d, + d => d.map(t => t.type === 'setIdentifier' ? t.toString() : null), + d => d.filter(t => !!t), + d => ({type: 'alias', alias: d }), + ) }, {"name": "phoneList$ebnf$1", "symbols": []}, {"name": "phoneList$ebnf$1$subexpression$1$ebnf$1", "symbols": []}, {"name": "phoneList$ebnf$1$subexpression$1$ebnf$1$subexpression$1", "symbols": [(lexer.has("comma") ? {type: "comma"} : comma), "_"]}, diff --git a/src/utils/latl/grammar.ne b/src/utils/latl/grammar.ne index d58e15f..147514e 100644 --- a/src/utils/latl/grammar.ne +++ b/src/utils/latl/grammar.ne @@ -72,13 +72,6 @@ setDefinition -> %setIdentifier (setAlias):? __ equal __ setExpression : t), ) %} -setAlias -> %comma _ %setIdentifier - {% pipe( - d => d && d.length ? d.filter(t => !!t) : d, - d => d.map(t => t.type === 'setIdentifier' ? t.toString() : null), - d => d.filter(t => !!t), - d => ({type: 'alias', alias: d }), - ) %} setExpression -> %openSquareBracket _ phoneList _ %closeSquareBracket | %openCurlyBracket _ (setOperation):? _ %closeCurlyBracket {% @@ -88,6 +81,15 @@ setExpression -> %openSquareBracket _ phoneList _ %closeSquareBracket d => d.map(t => t.map(u => u[0])), flag('setExpression') ) %} + +setAlias -> %comma _ %setIdentifier + {% pipe( + d => d && d.length ? d.filter(t => !!t) : d, + d => d.map(t => t.type === 'setIdentifier' ? t.toString() : null), + d => d.filter(t => !!t), + d => ({type: 'alias', alias: d }), + ) %} + phoneList -> (%phone (%comma _):* ):* {% pipe( diff --git a/src/utils/latl/lexer.js b/src/utils/latl/lexer.js index 30f85e4..573dba0 100644 --- a/src/utils/latl/lexer.js +++ b/src/utils/latl/lexer.js @@ -1,116 +1,124 @@ -const moo = require('moo'); +const moo = require("moo"); const lexer = moo.states({ main: { - comment: /;.*$/, - star: { match: /\*/, push: 'epoch' }, - slash: { match: /\//, push: 'lexicon' }, + comment: /;.*$/, + star: { match: /\*/, push: "epoch" }, + slash: { match: /\//, push: "lexicon" }, // change so that identifiers are always upper, keywords are always lower, phones are always lower - 'kwSet': { match: 'set', type: moo.keywords({ 'kwSet': 'set '}), push: 'setDefinition'}, - identifier: { match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/, }, - openBracket: { match: /\[/, push: 'feature' }, - whiteSpace: { match: /\s+/, lineBreaks: true }, - newLine: { match: /\n+/, lineBreaks: true } + kwSet: { + match: "set", + type: moo.keywords({ kwSet: "set " }), + push: "setDefinition", + }, + identifier: { match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/ }, + openBracket: { match: /\[/, push: "feature" }, + whiteSpace: { match: /\s+/, lineBreaks: true }, + newLine: { match: /\n+/, lineBreaks: true }, }, - + epoch: { - identifier: { match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/, push: 'rule' }, - openParen: { match: /\(/, push: 'ruleDefinition' }, - pipe: { match: /\|/, pop: true }, - greaterThan: /\>/, - arrow: /\-\>/, - hash: /#/, - slash: /\//, - dot: /\./, - underscore: /\_/, - newLine: { match: /\n/, lineBreaks: true } + identifier: { + match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/, + push: "rule", + }, + openParen: { match: /\(/, push: "ruleDefinition" }, + pipe: { match: /\|/, pop: true }, + greaterThan: /\>/, + arrow: /\-\>/, + hash: /#/, + slash: /\//, + dot: /\./, + underscore: /\_/, + newLine: { match: /\n/, lineBreaks: true }, }, - + ruleDefinition: { - doubleTick: { match: /``/, push: 'ruleName' }, - singleTick: { match: /`/, push: 'ruleDescription' }, + doubleTick: { match: /``/, push: "ruleName" }, + singleTick: { match: /`/, push: "ruleDescription" }, // push rule - closeParen: { match: /\)/, pop: true }, - newLine: { match: /\n/, lineBreaks: true } + closeParen: { match: /\)/, pop: true }, + newLine: { match: /\n/, lineBreaks: true }, }, ruleName: { - ruleName: { match: /.+(?=``)/ }, - doubleTick: { match: /``/, pop: true } + ruleName: { match: /.+(?=``)/ }, + doubleTick: { match: /``/, pop: true }, }, ruleDescription: { - ruleDescription: { match: /.+(?=`)/ }, - singleTick: { match: /`/, pop: true } + ruleDescription: { match: /.+(?=`)/ }, + singleTick: { match: /`/, pop: true }, }, - + rule: { - openSquareBracket: { match: /\[/, push: 'ruleFeature' }, + openSquareBracket: { match: /\[/, push: "ruleFeature" }, // whiteSpace: { match: /\s/ }, - newLine: { match: /\n/, pop: true, lineBreaks: true } + newLine: { match: /\n/, pop: true, lineBreaks: true }, }, - + ruleFeature: { - ruleFeature: { match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/ }, - closeBracket: { match: /\]/, pop: true }, - newLine: { match: /\n/, lineBreaks: true } + ruleFeature: { match: /[A-Za-z]+[\u00c0-\u03FFA-Za-z0-9\\-\\_]*/ }, + closeBracket: { match: /\]/, pop: true }, + newLine: { match: /\n/, lineBreaks: true }, }, - + lexicon: { - slash: { match: /\//, pop: true }, - newLine: { match: /\n/, lineBreaks: true } + slash: { match: /\//, pop: true }, + newLine: { match: /\n/, lineBreaks: true }, }, - + feature: { - closeBracket: { match: /\]/, pop: true }, - positiveAssignment: /\+=/, - negativeAssignment: /\-=/, - newLine: { match: /\n/, lineBreaks: true } + closeBracket: { match: /\]/, pop: true }, + positiveAssignment: /\+=/, + negativeAssignment: /\-=/, + newLine: { match: /\n/, lineBreaks: true }, }, - + setDefinition: { - comment: /;.*$/, - setIdentifier: { match: /[A-Z]+[A-Z_]*/ }, - openCurlyBracket: { match: /\{/, push: 'setOperation' }, - equal: /=/, - openSquareBracket: /\[/, - phone: /[\u00c0-\u03FFa-z]+/, - closeSquareBracket: { match: /\]/ }, - comma: { match: /,/, push: 'commaOperation' }, - whiteSpace: { match: /[\t ]+/ }, - newLine: { match: /\n/, pop: true, lineBreaks: true }, + comment: /;.*$/, + setIdentifier: { match: /[A-Z]+[A-Z_]*/ }, + openCurlyBracket: { match: /\{/, push: "setOperation" }, + equal: /=/, + openSquareBracket: /\[/, + phone: /[\u00c0-\u03FFa-z]+/, + closeSquareBracket: { match: /\]/ }, + comma: { match: /,/, push: "commaOperation" }, + whiteSpace: { match: /[\t ]+/ }, + newLine: { match: /\n/, pop: true, lineBreaks: true }, }, - + setOperation: { - closeCurlyBracket: { match: /\}/, pop: true }, + closeCurlyBracket: { match: /\}/, pop: true }, // ! restrict identifiers - keyword: { match: ['not', 'and', 'or', 'nor', 'in', 'yield', 'concat', 'dissoc'], type: moo.keywords({ - 'kwSetNot': 'not' , - 'kwSetAnd': 'and' , - 'kwSetOr': 'or' , - 'kwSetNor': 'nor' , - 'kwSetIn': 'in' , - 'kwSetYield': 'yield' , - 'kwSetConcat': 'concat', - 'kwSetDissoc': 'dissoc' - }) + keyword: { + match: ["not", "and", "or", "nor", "in", "yield", "concat", "dissoc"], + type: moo.keywords({ + kwSetNot: "not", + kwSetAnd: "and", + kwSetOr: "or", + kwSetNor: "nor", + kwSetIn: "in", + kwSetYield: "yield", + kwSetConcat: "concat", + kwSetDissoc: "dissoc", + }), }, - identifier: /[A-Z]+[A-Z_]+/, - whiteSpace: { match: /\s+/, lineBreaks: true }, - openSquareBracket: /\]/, - closeSquareBracket: /\[/, - identifier: /[A-Z]+[A-Z_]*/, - phone: /[\u00c0-\u03FFa-z]+/, + identifier: /[A-Z]+[A-Z_]+/, + whiteSpace: { match: /\s+/, lineBreaks: true }, + openSquareBracket: /\[/, + closeSquareBracket: /\]/, + identifier: /[A-Z]+[A-Z_]*/, + phone: /[\u00c0-\u03FFa-z]+/, }, - + commaOperation: { // if comma is detected during a definition, the commaOperation consumes all white space and pops back to definition // this prevents popping back to main - comment: /\s*;.*$/, - whiteSpace: { match: /\s+/, lineBreaks: true, pop: true }, - newLine: { match: /\n/, lineBreaks: true, pop: true } - } - + comment: /\s*;.*$/, + whiteSpace: { match: /\s+/, lineBreaks: true, pop: true }, + newLine: { match: /\n/, lineBreaks: true, pop: true }, + }, }); -module.exports = {lexer}; \ No newline at end of file +module.exports = { lexer }; diff --git a/src/utils/latl/test/assertionData.js b/src/utils/latl/test/assertionData.js index 174dde8..27e121a 100644 --- a/src/utils/latl/test/assertionData.js +++ b/src/utils/latl/test/assertionData.js @@ -1,290 +1,334 @@ export const assertionData = { simpleComment: { latl: `; comment`, - tokens: [ - { type: 'comment', value: '; comment'} - ], + tokens: [{ type: "comment", value: "; comment" }], AST: { - main: [] + main: [], }, - code: '' + code: "", }, simpleSetDefinition: { latl: `set NASAL_PULMONIC_CONSONANTS = [ m̥, m, ɱ ]`, tokens: [ - { type: 'kwSet', value: 'set' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'setIdentifier', value: "NASAL_PULMONIC_CONSONANTS" }, - { type: "whiteSpace", value: " ", }, - { type: "equal", value: "=", }, - { type: "whiteSpace", value: " ", }, - { type: "openSquareBracket", value: "[", }, - { type: "whiteSpace", value: " ", }, - { type: "phone", value: "m̥", }, - { type: "comma", value: ",", }, - { type: "whiteSpace", value: " ", }, - { type: "phone", value: "m", }, - { type: "comma", value: ",", }, - { type: "whiteSpace", value: " ", }, - { type: "phone", value: "ɱ", }, - { type: "whiteSpace", value: " ", }, - { type: "closeSquareBracket", value: "]"} + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "NASAL_PULMONIC_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m̥" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɱ" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, ], AST: { main: [ { - type: 'set', - setIdentifier: 'NASAL_PULMONIC_CONSONANTS', - setExpression: [ 'm̥', 'm', 'ɱ' ] - } - ] - } - , - code: '' + type: "set", + setIdentifier: "NASAL_PULMONIC_CONSONANTS", + setExpression: ["m̥", "m", "ɱ"], + }, + ], + }, + code: "", }, commaSetDefinition: { latl: ` set NASAL_PULMONIC_CONSONANTS = [ m̥, m, ɱ, n̼, n̥, n, ɳ̊, ɳ, ɲ̊, ɲ, ŋ, ̊ŋ, ɴ ], STOP_PULMONIC_CONSONANTS = [ p, b, p̪, b̪, t̼, d̼, t, d, ʈ, ɖ, c, ɟ, k, ɡ, q, ɢ, ʡ, ʔ ]`, tokens: [ - { type: 'whiteSpace', value: '\n' }, - { type: 'kwSet', value: 'set' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'setIdentifier', value: 'NASAL_PULMONIC_CONSONANTS' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'equal', value: '=' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'openSquareBracket', value: '[' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'm̥' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'm' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɱ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n̼' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n̥' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɳ̊' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɳ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɲ̊' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɲ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ŋ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: '̊ŋ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɴ' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'closeSquareBracket', value: ']' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: '\n ' }, - { type: 'setIdentifier', value: 'STOP_PULMONIC_CONSONANTS' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'equal', value: '=' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'openSquareBracket', value: '[' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'p' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'b' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'p̪' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'b̪' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 't̼' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'd̼' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 't' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'd' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ʈ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɖ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'c' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɟ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'k' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɡ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'q' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɢ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ʡ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ʔ' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'closeSquareBracket', value: ']' } + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "NASAL_PULMONIC_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m̥" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɱ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n̼" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n̥" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɳ̊" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɳ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɲ̊" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɲ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ŋ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "̊ŋ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɴ" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "STOP_PULMONIC_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "p" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "b" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "p̪" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "b̪" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "t̼" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "d̼" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "t" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "d" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ʈ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɖ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "c" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɟ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "k" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɡ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "q" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɢ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ʡ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ʔ" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, ], AST: { main: [ { - type: 'set', - setIdentifier: 'NASAL_PULMONIC_CONSONANTS', - setExpression: [ 'm̥', 'm', 'ɱ', 'n̼', 'n̥', 'n', 'ɳ̊', 'ɳ', 'ɲ̊', 'ɲ', 'ŋ', '̊ŋ', 'ɴ' ] + type: "set", + setIdentifier: "NASAL_PULMONIC_CONSONANTS", + setExpression: [ + "m̥", + "m", + "ɱ", + "n̼", + "n̥", + "n", + "ɳ̊", + "ɳ", + "ɲ̊", + "ɲ", + "ŋ", + "̊ŋ", + "ɴ", + ], }, { - type: 'set', - setIdentifier: 'STOP_PULMONIC_CONSONANTS', - setExpression: [ 'p', 'b', 'p̪', 'b̪', 't̼', 'd̼', 't', 'd', 'ʈ', 'ɖ', 'c', 'ɟ', 'k', 'ɡ', 'q', 'ɢ', 'ʡ', 'ʔ' ] - } - ] - } + type: "set", + setIdentifier: "STOP_PULMONIC_CONSONANTS", + setExpression: [ + "p", + "b", + "p̪", + "b̪", + "t̼", + "d̼", + "t", + "d", + "ʈ", + "ɖ", + "c", + "ɟ", + "k", + "ɡ", + "q", + "ɢ", + "ʡ", + "ʔ", + ], + }, + ], + }, }, setAliasDefinition: { latl: ` set NASAL_PULMONIC_CONSONANTS, N = [ m̥, m, ɱ, n̼, n̥, n, ɳ̊, ɳ, ɲ̊, ɲ, ŋ, ̊ŋ, ɴ ]`, - tokens: [ - { type: 'whiteSpace', value: '\n' }, - { type: 'kwSet', value: 'set' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'setIdentifier', value: 'NASAL_PULMONIC_CONSONANTS' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'setIdentifier', value: 'N' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'equal', value: '=' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'openSquareBracket', value: '[' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'm̥' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'm' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɱ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n̼' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n̥' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'n' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɳ̊' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɳ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɲ̊' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɲ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ŋ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: '̊ŋ' }, - { type: 'comma', value: ',' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'phone', value: 'ɴ' }, - { type: 'whiteSpace', value: ' ' }, - { type: 'closeSquareBracket', value: ']' }, + tokens: [ + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "NASAL_PULMONIC_CONSONANTS" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "N" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m̥" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "m" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɱ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n̼" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n̥" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "n" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɳ̊" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɳ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɲ̊" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɲ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ŋ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "̊ŋ" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "ɴ" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, ], AST: { main: [ { - type: 'set', - setIdentifier: 'NASAL_PULMONIC_CONSONANTS', - setAlias: 'N', - setExpression: [ 'm̥', 'm', 'ɱ', 'n̼', 'n̥', 'n', 'ɳ̊', 'ɳ', 'ɲ̊', 'ɲ', 'ŋ', '̊ŋ', 'ɴ' ] - } - ] - } + type: "set", + setIdentifier: "NASAL_PULMONIC_CONSONANTS", + setAlias: "N", + setExpression: [ + "m̥", + "m", + "ɱ", + "n̼", + "n̥", + "n", + "ɳ̊", + "ɳ", + "ɲ̊", + "ɲ", + "ŋ", + "̊ŋ", + "ɴ", + ], + }, + ], + }, }, setDefinitionJoin: { latl: ` set CLICK_CONSONANTS = { TENUIS_CLICK_CONSONANTS or VOICED_CLICK_CONSONANTS }`, tokens: [ - { type: 'whiteSpace', value: '\n'}, - { type: 'kwSet', value: 'set'}, - { type: 'whiteSpace', value: ' '}, - { type: 'setIdentifier', value: 'CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'equal', value: '='}, - { type: 'whiteSpace', value: ' '}, - { type: 'openCurlyBracket', value: '{'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'TENUIS_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'kwSetOr', value: 'or'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'VOICED_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'closeCurlyBracket', value: '}'} + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "TENUIS_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetOr", value: "or" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "VOICED_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, ], AST: { main: [ { - type: 'set', - setIdentifier: 'CLICK_CONSONANTS', - setExpression: [ - { - type: 'operator', - operator: 'or', - operands: [ - { - type: 'identifier', - identifier: 'TENUIS_CLICK_CONSONANTS' - }, - { - type: 'identifier', - identifier: 'VOICED_CLICK_CONSONANTS' - }, - ] - } - ] - } - ] - } + type: "set", + setIdentifier: "CLICK_CONSONANTS", + setExpression: [ + { + type: "operator", + operator: "or", + operands: [ + { + type: "identifier", + identifier: "TENUIS_CLICK_CONSONANTS", + }, + { + type: "identifier", + identifier: "VOICED_CLICK_CONSONANTS", + }, + ], + }, + ], + }, + ], + }, }, setDefinitionMultiJoin: { latl: ` @@ -292,161 +336,161 @@ set CLICK_CONSONANTS = { TENUIS_CLICK_CONSONANTS or VOICED_CLICK_CONSONANTS or NASAL_CLICK_CONSONANTS or L_CLICK_CONSONANTS }`, tokens: [ - { type: 'whiteSpace', value: '\n'}, - { type: 'kwSet', value: 'set'}, - { type: 'whiteSpace', value: ' '}, - { type: 'setIdentifier', value: 'CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'equal', value: '='}, - { type: 'whiteSpace', value: ' '}, - { type: 'openCurlyBracket', value: '{'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'TENUIS_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'kwSetOr', value: 'or'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'VOICED_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: '\n '}, - { type: 'kwSetOr', value: 'or'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'NASAL_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' '}, - { type: 'kwSetOr', value: 'or'}, - { type: 'whiteSpace', value: ' '}, - { type: 'identifier', value: 'L_CLICK_CONSONANTS'}, - { type: 'whiteSpace', value: ' \n '}, - { type: 'closeCurlyBracket', value: '}'} + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "TENUIS_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetOr", value: "or" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "VOICED_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: "\n " }, + { type: "kwSetOr", value: "or" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "NASAL_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetOr", value: "or" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "L_CLICK_CONSONANTS" }, + { type: "whiteSpace", value: " \n " }, + { type: "closeCurlyBracket", value: "}" }, ], AST: { main: [ { - type: 'set', - setIdentifier: 'CLICK_CONSONANTS', - setExpression: [ - { - type: 'operator', - operator: 'or ', - operands: [ - { - type: 'identifier', - identifier: 'TENUIS_CLICK_CONSONANTS' - }, + type: "set", + setIdentifier: "CLICK_CONSONANTS", + setExpression: [ + { + type: "operator", + operator: "or ", + operands: [ { - type: 'operator', - operator: 'or', + type: "identifier", + identifier: "TENUIS_CLICK_CONSONANTS", + }, + { + type: "operator", + operator: "or", operands: [ - { - type: 'identifier', - identifier: 'VOICED_CLICK_CONSONANTS' - }, { - type: 'operator', - operator: 'or', + type: "identifier", + identifier: "VOICED_CLICK_CONSONANTS", + }, + { + type: "operator", + operator: "or", operands: [ - { - type: 'identifier', - identifier: 'NASAL_CLICK_CONSONANTS' - }, { - type: 'identifier', - operands: 'L_CLICK_CONSONANTS' - } - ] - } - ] - } - ] - } - ] - } - ] - } + type: "identifier", + identifier: "NASAL_CLICK_CONSONANTS", + }, + { + type: "identifier", + operands: "L_CLICK_CONSONANTS", + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + }, }, setDefinitionYield: { latl: ` set NASAL_VOWELS = { [ V ] in ORAL_VOWELS yield [ Ṽ ] }, SHORT_NASAL_VOWELS = { [ Vː ] in NASAL_VOWELS yield [ V ]ː }, LONG_NASAL_VOWELS = { [ Vː ] in NASAL_VOWELS }`, - tokens: [ - { type: 'whiteSpace', value: '\n', }, - { type: 'kwSet', value: 'set', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'setIdentifier', value: 'NASAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'V', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetIn', value: 'in', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'ORAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'V', }, - { type: 'phone', value: '̃', }, // test display for COMBINING TILDE OVERLAY is deceiving - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SHORT_NASAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'V', }, - { type: 'phone', value: 'ː', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetIn', value: 'in', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'NASAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'V', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'phone', value: 'ː', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'LONG_NASAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'V', }, - { type: 'phone', value: 'ː', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetIn', value: 'in', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'NASAL_VOWELS', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - ] + tokens: [ + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "NASAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "V" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetIn", value: "in" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "ORAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "V" }, + { type: "phone", value: "̃" }, // test display for COMBINING TILDE OVERLAY is deceiving + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SHORT_NASAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "V" }, + { type: "phone", value: "ː" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetIn", value: "in" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "NASAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "V" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "phone", value: "ː" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "LONG_NASAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "V" }, + { type: "phone", value: "ː" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetIn", value: "in" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "NASAL_VOWELS" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + ], }, setOperationsJoin: { @@ -458,91 +502,91 @@ set SET_C = { SET_A not SET_B }, ; left anti join SET_F = { not SET_A }, ; = { GLOBAL not SET_A } SET_G = { not SET_A nor SET_B } ; = { GLOBAL not { SET_A or SET_B } }`, tokens: [ - { type: 'whiteSpace', value: '\n', }, - { type: 'comment', value: '; ---- set join operations non-mutable! ', }, - { type: 'whiteSpace', value: '\n', }, - { type: 'kwSet', value: 'set', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'setIdentifier', value: 'SET_C', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetNot', value: 'not', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_B', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; left anti join', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_D', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetAnd', value: 'and', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_B', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; inner join', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_E', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetOr', value: 'or', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_B', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; full outer join', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_F', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetNot', value: 'not', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; = { GLOBAL not SET_A }', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_G', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetNot', value: 'not', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetNor', value: 'nor', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_B', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'comment', value: '; = { GLOBAL not { SET_A or SET_B } }', } - ] + { type: "whiteSpace", value: "\n" }, + { type: "comment", value: "; ---- set join operations non-mutable! " }, + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "SET_C" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetNot", value: "not" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_B" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "comment", value: " ; left anti join" }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_D" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetAnd", value: "and" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_B" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "comment", value: " ; inner join" }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_E" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetOr", value: "or" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_B" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "comment", value: " ; full outer join" }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_F" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetNot", value: "not" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "comment", value: " ; = { GLOBAL not SET_A }" }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_G" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetNot", value: "not" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetNor", value: "nor" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_B" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "whiteSpace", value: " " }, + { type: "comment", value: "; = { GLOBAL not { SET_A or SET_B } }" }, + ], }, setOperations: { @@ -557,196 +601,210 @@ set SET_B = { [ Xy ] in SET_A }, ; FILTER: where X is any character and SET_H = { SET_A yield [ X ] dissoc y }, SET_I = { [ Xy ] in SET_A yield [ X ]y } ; combined FILTER and DISSOCIATE`, tokens: [ - { type: 'whiteSpace', value: '\n', }, - { type: 'comment', value: '; ---- set character operations - non-mutable!', }, - { type: 'whiteSpace', value: '\n', }, - { type: 'kwSet', value: 'set', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'setIdentifier', value: 'SET_B', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetIn', value: 'in', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; FILTER: where X is any character and y is a filtering character', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_C', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; CONCATENATE: performs transformation with (prepended or) appended character', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_D', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetConcat', value: 'concat', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_E', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetConcat', value: 'concat', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_F', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'phone', value: 'y', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'comment', value: ' ; DISSOCIATE: performs transformation removing prepended (or appended) character', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_G', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetDissoc', value: 'dissoc', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_H', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetDissoc', value: 'dissoc', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'comma', value: ',', }, - { type: 'whiteSpace', value: '\n ', }, - { type: 'setIdentifier', value: 'SET_I', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'equal', value: '=', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openCurlyBracket', value: '{', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetIn', value: 'in', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'SET_A', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'kwSetYield', value: 'yield', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeSquareBracket', value: '[', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'identifier', value: 'X', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'openSquareBracket', value: ']', }, - { type: 'phone', value: 'y', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'closeCurlyBracket', value: '}', }, - { type: 'whiteSpace', value: ' ', }, - { type: 'comment', value: '; combined FILTER and DISSOCIATE', } - ] + { type: "whiteSpace", value: "\n" }, + { + type: "comment", + value: "; ---- set character operations - non-mutable!", + }, + { type: "whiteSpace", value: "\n" }, + { type: "kwSet", value: "set" }, + { type: "whiteSpace", value: " " }, + { type: "setIdentifier", value: "SET_B" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetIn", value: "in" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { + type: "comment", + value: + " ; FILTER: where X is any character and y is a filtering character", + }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_C" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { + type: "comment", + value: + " ; CONCATENATE: performs transformation with (prepended or) appended character", + }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_D" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetConcat", value: "concat" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_E" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetConcat", value: "concat" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_F" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "y" }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { + type: "comment", + value: + " ; DISSOCIATE: performs transformation removing prepended (or appended) character", + }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_G" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetDissoc", value: "dissoc" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_H" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetDissoc", value: "dissoc" }, + { type: "whiteSpace", value: " " }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "comma", value: "," }, + { type: "whiteSpace", value: "\n " }, + { type: "setIdentifier", value: "SET_I" }, + { type: "whiteSpace", value: " " }, + { type: "equal", value: "=" }, + { type: "whiteSpace", value: " " }, + { type: "openCurlyBracket", value: "{" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetIn", value: "in" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "SET_A" }, + { type: "whiteSpace", value: " " }, + { type: "kwSetYield", value: "yield" }, + { type: "whiteSpace", value: " " }, + { type: "openSquareBracket", value: "[" }, + { type: "whiteSpace", value: " " }, + { type: "identifier", value: "X" }, + { type: "whiteSpace", value: " " }, + { type: "closeSquareBracket", value: "]" }, + { type: "phone", value: "y" }, + { type: "whiteSpace", value: " " }, + { type: "closeCurlyBracket", value: "}" }, + { type: "whiteSpace", value: " " }, + { type: "comment", value: "; combined FILTER and DISSOCIATE" }, + ], }, - -} \ No newline at end of file +}; diff --git a/src/utils/latl/test/parser.test.js b/src/utils/latl/test/parser.test.js index 93337dc..bc42250 100644 --- a/src/utils/latl/test/parser.test.js +++ b/src/utils/latl/test/parser.test.js @@ -1,70 +1,71 @@ -import { lexer } from '../lexer'; -import { parser } from '../parser'; -import { assertionData } from './assertionData'; +import { lexer } from "../lexer"; +import { parser } from "../parser"; +import { assertionData } from "./assertionData"; -describe('parser', () => { - it('parses simple comment', () => { +describe("parser", () => { + it("parses simple comment", () => { const { latl, AST } = assertionData.simpleComment; const feedResults = parser().feed(latl).results; expect(feedResults.length).toBe(1); - expect(feedResults[0]).toStrictEqual(AST) - }) + expect(feedResults[0]).toStrictEqual(AST); + }); - it('parses simple set definition', () => { + it("parses simple set definition", () => { const { latl, AST } = assertionData.simpleSetDefinition; const feedResults = parser().feed(latl).results; expect(feedResults.length).toBe(1); expect(feedResults[0]).toStrictEqual(AST); - }) + }); - it('parses multiple set definitions with comma operator', () => { + it("parses multiple set definitions with comma operator", () => { const { latl, AST } = assertionData.commaSetDefinition; const feedResults = parser().feed(latl).results; expect(feedResults.length).toBe(1); expect(feedResults[0]).toStrictEqual(AST); }); - it('lexes set definition with alias' - , () => { + it("lexes set definition with alias", () => { const { latl, AST } = assertionData.setAliasDefinition; const feedResults = parser().feed(latl).results; expect(feedResults[0]).toStrictEqual(AST); - } - ); + }); - it('lexes set definition with set join', () => { + it.skip("lexes set definition with set join", () => { const { latl, AST } = assertionData.setDefinitionJoin; const feedResults = parser().feed(latl).results; expect(feedResults[0]).toStrictEqual(AST); }); - it.todo('lexes set definition with yield operation' - // , () => { - // const { latl, tokens } = assertionData.setDefinitionYield; - // const stream = getStream(latl); - // expect(stream).toStrictEqual(tokens); - // } + it.todo( + "lexes set definition with yield operation" + // , () => { + // const { latl, tokens } = assertionData.setDefinitionYield; + // const stream = getStream(latl); + // expect(stream).toStrictEqual(tokens); + // } ); - it.todo('lexes all set join operations' - // , () => { - // const { latl, tokens } = assertionData.setOperationsJoin; - // const stream = getStream(latl); - // expect(stream).toStrictEqual(tokens); - // } + it.todo( + "lexes all set join operations" + // , () => { + // const { latl, tokens } = assertionData.setOperationsJoin; + // const stream = getStream(latl); + // expect(stream).toStrictEqual(tokens); + // } ); - it.todo('lexes set filter, concat, and dissoc operations' - // , () => { - // const { latl, tokens } = assertionData.setOperations; - // const stream = getStream(latl); - // expect(stream).toStrictEqual(tokens); - // } - ) -}) + it.todo( + "lexes set filter, concat, and dissoc operations" + // , () => { + // const { latl, tokens } = assertionData.setOperations; + // const stream = getStream(latl); + // expect(stream).toStrictEqual(tokens); + // } + ); +}); // { -// "set": +// "set": // [ // [ // [ @@ -176,4 +177,4 @@ describe('parser', () => { // ], // ], // "token": "kwSet", -// } \ No newline at end of file +// }