Merge pull request #663 from quantified-uncertainty/reducer-modules

Reducer modules part 1: grammar
This commit is contained in:
Ozzie Gooen 2022-06-08 08:19:57 -07:00 committed by GitHub
commit ab2c6621be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -224,10 +224,9 @@ postOperator = indexedValue
indexedValue
= collectionElement
/ recordElement
/ atom
collectionElement
collectionElement
= head:atom &('['/'('/'.')
tail:(
_ '[' _nl arg:expression _nl ']' {return {fn: postOperatorToFunction['[]'], args: [arg]}}
@ -242,13 +241,6 @@ indexedValue
= head:expression tail:(_ ',' _nl @expression)*
{ return [head, ...tail]; }
recordElement
= head:dollarIdentifier &'.'
tail:(_ '.' _nl arg:$dollarIdentifier {return {fn: postOperatorToFunction['.'], args: [nodeString(arg)]}})*
{ return tail.reduce(function(result, element) {
return makeFunctionCall(element.fn, [result, ...element.args])
}, head)}
atom
= '(' _nl expression:expression _nl ')' {return expression}
/ basicValue
@ -259,8 +251,18 @@ basicLiteral
= string
/ number
/ boolean
/ dollarIdentifierWithModule
/ dollarIdentifier
dollarIdentifierWithModule 'identifier'
= head:moduleIdentifier
tail:('.' _nl @moduleIdentifier)* '.' _nl
final:dollarIdentifier
{ tail.push(final);
return tail.reduce(function(result, element) {
return makeFunctionCall(postOperatorToFunction['[]'], [result, element])
}, head)}
identifier 'identifier'
= ([_a-z]+[_a-z0-9]i*) {return nodeIdentifier(text())}
@ -270,6 +272,10 @@ unitIdentifier 'identifier'
dollarIdentifier '$identifier'
= ([\$_a-z]+[\$_a-z0-9]i*) {return nodeIdentifier(text())}
moduleIdentifier 'identifier'
= ([A-Z]+[_a-z0-9]i*) {return nodeIdentifier(text())}
string 'string'
= characters:("'" @([^'])* "'") {return nodeString(characters.join(''))}
/ characters:('"' @([^"])* '"') {return nodeString(characters.join(''))}
@ -338,7 +344,7 @@ recordConstructor 'record'
_ 'whitespace'
= whiteSpaceCharactersOrComment*
_nl 'optional whitespace or newline'
_nl 'whitespace or newline'
= (whiteSpaceCharactersOrComment / commentOrNewLine)*
__ 'whitespace'