diff --git a/corpus/test.langexp b/corpus/test.langexp index 62eb461..185dc02 100644 --- a/corpus/test.langexp +++ b/corpus/test.langexp @@ -98,6 +98,10 @@ func_2 = { =: Fruit @banana () -> "banana"; %z := ( + ) 1 2; + + // tuple access + %t := 1 & 2 & 3; + print t.0; } test.something = { @@ -559,7 +563,23 @@ arg_deduction_example 'name 'duration : <- String <- Float -> Task = Task 'name (name_expression (operator) (number_literal) - (number_literal)))))) + (number_literal)))) + (match + (name_definition + (simple_name_identifier)) + (case + (operator_expression + (operator_expression + (number_literal) + (operator) + (number_literal)) + (operator) + (number_literal)))) + (name_expression + (simple_name_identifier) + (tuple_access + (simple_name_identifier) + (number_literal))))) (function_definition (simple_name_identifier) (block diff --git a/grammar.g4 b/grammar.g4 index 7c90d81..80aa4ca 100644 --- a/grammar.g4 +++ b/grammar.g4 @@ -64,6 +64,8 @@ name_definition: (('%' | 'let') | ('$' | 'var')) (SIMPLE_NAME_IDENTIFIER | PLACE access: scoped_expression '[' super_expression ']' ; +tuple_access: scoped_expression, '.' NUMBER_LITERAL + reference: /* prec -1 ?? */ (('<>' | 'ref') | ('<-' | 'in')) scoped_expression ; suffix_expression: scoped_expression ('?' | '!') @@ -111,6 +113,7 @@ scoped_expression: name_identifier not_name_scoped_expression: PLACEHOLDER | name_definition | access + | tuple_access | loop_control | array | literal diff --git a/grammar.js b/grammar.js index f8c3f40..a41afa8 100644 --- a/grammar.js +++ b/grammar.js @@ -141,6 +141,8 @@ module.exports = grammar({ access: $ => seq($._scoped_expression, '[', $._super_expression, ']'), + tuple_access: $ => seq($._scoped_expression, '.', $.number_literal), + loop_control: $ => choice('break', 'continue'), reference: $ => prec(-1, seq(choice(choice('<>', 'ref'), choice('<-', 'in')), $._scoped_expression)), @@ -204,6 +206,7 @@ module.exports = grammar({ $.placeholder, $.name_definition, $.access, + $.tuple_access, $.loop_control, $.reference, $.suffix_expression,