Created
May 10, 2019 17:09
-
-
Save affo/bde5b78bfdecbfe6901965920e1018b6 to your computer and use it in GitHub Desktop.
Flux language grammar in BNF form
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File = File-a File-b StatementList empty | |
File-a = '' | PackageClause | |
PackageClause = "package" identifier empty | |
empty = '' | |
File-b = '' | ImportList | |
ImportList = ImportList-a empty | |
ImportList-a = '' | ImportDeclaration ImportList-a | |
ImportDeclaration = "import" ImportDeclaration-a string_lit | |
ImportDeclaration-a = '' | identifier | |
StatementList = StatementList-a empty | |
StatementList-a = '' | Statement StatementList-a | |
Statement = OptionAssignment | BuiltinStatement | TestStatement | IdentStatement | ReturnStatement | ExpressionStatement empty | |
OptionAssignment = "option" identifier OptionAssignmentSuffix empty | |
OptionAssignmentSuffix = AssignStatement | "empty" identifier AssignStatement empty | |
AssignStatement = "=" Expression empty | |
Expression = ConditionalExpression empty | |
ConditionalExpression = LogicalOrExpression | "if" Expression "then" Expression "else" Expression empty | |
LogicalOrExpression = LogicalAndExpression LogicalOrExpression-a empty | |
LogicalAndExpression = UnaryLogicalExpression LogicalAndExpression-a empty | |
UnaryLogicalExpression = ComparisonExpression | UnaryLogicalOperator UnaryLogicalExpression empty | |
ComparisonExpression = AdditiveExpression ComparisonExpression-a empty | |
AdditiveExpression = MultiplicativeExpression AdditiveExpression-a empty | |
MultiplicativeExpression = PipeExpression MultiplicativeExpression-a empty | |
PipeExpression = UnaryExpression PipeExpression-a empty | |
UnaryExpression = PostfixExpression | PrefixOperator UnaryExpression empty | |
PostfixExpression = PrimaryExpression PostfixExpression-a empty | |
PrimaryExpression = identifer | int_lit | float_lit | string_lit | regex_lit | duration_lit | pipe_receive_lit | ObjectLiteral | ArrayLiteral | ParenExpression empty | |
ObjectLiteral = "{" PropertyList "}" empty | |
PropertyList = PropertyList-a empty | |
PropertyList-a = '' | Property PropertyList-a-a | |
Property = identifier Property-a | string_lit ":" Expression empty | |
Property-a = '' | ":" Expression | |
PropertyList-a-a = '' | "," Property PropertyList-a-a | |
ArrayLiteral = "[" ExpressionList "]" empty | |
ExpressionList = ExpressionList-a empty | |
ExpressionList-a = '' | Expression ExpressionList-a-a | |
ExpressionList-a-a = '' | "," Expression ExpressionList-a-a | |
ParenExpression = "(" ParenExpressionBody empty | "(" Expression ")" empty | |
ParenExpressionBody = ")" FunctionExpressionSuffix | identifer ParenIdentExpression | Expression ")" empty | |
FunctionExpressionSuffix = "=>" FunctionBodyExpression empty | |
FunctionBodyExpression = Block | Expression empty | |
Block = "{" StatementList "}" empty | |
ParenIdentExpression = ")" ParenIdentExpression-a | "=" Expression ParenIdentExpression-b ")" FunctionExpressionSuffix empty | "," ParameterList ")" FunctionExpressionSuffix | ExpressionSuffix ")" empty | |
ParenIdentExpression-a = '' | FunctionExpressionSuffix | |
ParenIdentExpression-b = '' | "," ParameterList | |
ParameterList = ParameterList-a empty | |
ParameterList-a = '' | Parameter ParameterList-a-a | |
Parameter = identifer Parameter-a empty | |
Parameter-a = '' | "=" Expression | |
ParameterList-a-a = '' | "," Parameter ParameterList-a-a | |
ExpressionSuffix = ExpressionSuffix-a ExpressionSuffix-b ExpressionSuffix-c ExpressionSuffix-d ExpressionSuffix-e ExpressionSuffix-f ExpressionSuffix-g empty | |
ExpressionSuffix-a = '' | PostfixOperator ExpressionSuffix-a | |
PostfixOperator = MemberExpression | CallExpression | IndexExpression empty | |
MemberExpression = DotExpression | MemberBracketExpression | |
DotExpression = "empty" identifer | |
MemberBracketExpression = "[" string "]" empty | |
CallExpression = "(" PropertyList ")" empty | |
IndexExpression = "[" Expression "]" empty | |
ExpressionSuffix-b = '' | PipeExpressionSuffix ExpressionSuffix-b | |
PipeExpressionSuffix = PipeOperator UnaryExpression empty | |
PipeOperator = pipe_forward empty | |
ExpressionSuffix-c = '' | MultiplicativeExpressionSuffix ExpressionSuffix-c | |
MultiplicativeExpressionSuffix = MultiplicativeOperator PipeExpression empty | |
MultiplicativeOperator = "*" | "/" empty | |
ExpressionSuffix-d = '' | AdditiveExpressionSuffix ExpressionSuffix-d | |
AdditiveExpressionSuffix = AdditiveOperator MultiplicativeExpression empty | |
AdditiveOperator = "+" | "-" empty | |
ExpressionSuffix-e = '' | ComparisonExpressionSuffix ExpressionSuffix-e | |
ComparisonExpressionSuffix = ComparisonOperator AdditiveExpression empty | |
ComparisonOperator = "==" | "!=" | "<" | "<=" | ">" | ">=" | "=~" | "!~" empty | |
ExpressionSuffix-f = '' | LogicalAndExpressionSuffix ExpressionSuffix-f | |
LogicalAndExpressionSuffix = LogicalAndOperator UnaryLogicalExpression empty | |
LogicalAndOperator = "and" empty | |
ExpressionSuffix-g = '' | LogicalOrExpressionSuffix ExpressionSuffix-g | |
LogicalOrExpressionSuffix = LogicalOrOperator LogicalAndExpression empty | |
LogicalOrOperator = "or" empty | |
PostfixExpression-a = '' | PostfixOperator PostfixExpression-a | |
PrefixOperator = "+" | "-" empty | |
PipeExpression-a = '' | PipeExpressionSuffix PipeExpression-a | |
MultiplicativeExpression-a = '' | MultiplicativeExpressionSuffix MultiplicativeExpression-a | |
AdditiveExpression-a = '' | AdditiveExpressionSuffix AdditiveExpression-a | |
ComparisonExpression-a = '' | ComparisonExpressionSuffix ComparisonExpression-a | |
UnaryLogicalOperator = "not" empty | |
LogicalAndExpression-a = '' | LogicalAndExpressionSuffix LogicalAndExpression-a | |
LogicalOrExpression-a = '' | LogicalOrExpressionSuffix LogicalOrExpression-a | |
BuiltinStatement = "builtin" identifier empty | |
TestStatement = "test" identifier AssignStatement empty | |
IdentStatement = identifer IdentStatement-a empty | |
IdentStatement-a = AssignStatement | ExpressionSuffix | |
ReturnStatement = "return" Expression empty | |
ExpressionStatement = Expression empty |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment