Skip to content

Commit 1564db8

Browse files
author
Stevan Milic
committed
Add lambda expression
Fix call expression to allow block as arguments (#21) Update for comprehension to handle patterns Fix for comprehension to detect assignment as an enumerator Add access modifiers Update trait, object and class parameter to support modifiers Update scanner to support `with` on a new line Update function definition/declaration to support operator naming Update field expression to support operators as methods
1 parent 449b6ba commit 1564db8

File tree

7 files changed

+96221
-80358
lines changed

7 files changed

+96221
-80358
lines changed

corpus/definitions.txt

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ Class definitions
106106

107107
class C[T, U] {
108108
}
109-
110109
---
111110

112111
(compilation_unit
@@ -127,7 +126,8 @@ class A(b: B) extends C(b || ok) {
127126

128127
object C {
129128
class A
130-
extends B
129+
extends B[T]
130+
with C[T]
131131
}
132132

133133
---
@@ -154,7 +154,10 @@ object C {
154154
(object_definition
155155
(identifier)
156156
(template_body
157-
(class_definition (identifier) (extends_clause (type_identifier))))))
157+
(class_definition (identifier) (extends_clause
158+
(compound_type
159+
(generic_type (type_identifier) (type_arguments (type_identifier)))
160+
(generic_type (type_identifier) (type_arguments (type_identifier)))))))))
158161

159162
=======================================
160163
Class definitions with parameters
@@ -181,6 +184,10 @@ implicit final sealed class Point {
181184
private override def getX() = 1
182185
}
183186

187+
private[a] class D[T] private (x: T) {
188+
private[a] def b: Byte
189+
}
190+
184191
---
185192

186193
(compilation_unit
@@ -189,10 +196,16 @@ implicit final sealed class Point {
189196
(identifier)
190197
(template_body
191198
(function_definition
192-
(modifiers)
199+
(modifiers (access_modifier))
193200
(identifier)
194201
(parameters)
195-
(integer_literal)))))
202+
(integer_literal))))
203+
(class_definition (modifiers (access_modifier (access_qualifier (identifier))))
204+
(identifier) (type_parameters (identifier))
205+
(access_modifier) (class_parameters (class_parameter (identifier) (type_identifier)))
206+
(template_body (function_declaration
207+
(modifiers (access_modifier (access_qualifier (identifier))))
208+
(identifier) (type_identifier)))))
196209

197210
=======================================
198211
Trait definitions
@@ -346,6 +359,7 @@ Function declarations
346359

347360
class A {
348361
def b(c: D) : E
362+
def <*[B](that: IO[B]): IO[A]
349363
}
350364

351365
---
@@ -357,7 +371,12 @@ class A {
357371
(function_declaration
358372
(identifier)
359373
(parameters (parameter (identifier) (type_identifier)))
360-
(type_identifier)))))
374+
(type_identifier))
375+
(function_declaration
376+
(operator_identifier)
377+
(type_parameters (identifier))
378+
(parameters (parameter (identifier) (generic_type (type_identifier) (type_arguments (type_identifier)))))
379+
(generic_type (type_identifier) (type_arguments (type_identifier)))))))
361380

362381
=======================================
363382
Function definitions

corpus/expressions.txt

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ class C {
77
a()
88
a(123)
99
a(b, c)
10+
a.map(x => x + 1)
11+
a { 123 }
12+
a { b }
13+
a.map{ x => x + 1 }
14+
a.exists { case ((i, _)) => i }
1015
}
1116
}
1217

@@ -22,7 +27,17 @@ class C {
2227
(block
2328
(call_expression (identifier) (arguments))
2429
(call_expression (identifier) (arguments (integer_literal)))
25-
(call_expression (identifier) (arguments (identifier) (identifier))))))))
30+
(call_expression (identifier) (arguments (identifier) (identifier)))
31+
(call_expression (field_expression (identifier) (identifier)) (arguments
32+
(lambda_expression (identifier)
33+
(infix_expression (identifier) (operator_identifier) (integer_literal)))))
34+
(call_expression (identifier) (block (integer_literal)))
35+
(call_expression (identifier) (block (identifier)))
36+
(call_expression (field_expression (identifier) (identifier)) (block
37+
(lambda_expression (identifier)
38+
(infix_expression (identifier) (operator_identifier) (integer_literal)))))
39+
(call_expression (field_expression (identifier) (identifier)) (case_clause
40+
(tuple_pattern (tuple_pattern (identifier) (wildcard))) (identifier))))))))
2641

2742
===============================
2843
Generic functions
@@ -216,6 +231,7 @@ def matchTest(x: Int): String = x match {
216231
case 3 => {
217232
"3"
218233
}
234+
case ((i, _)) => i
219235
case _ =>
220236
val x = "many"
221237
"more"
@@ -233,6 +249,7 @@ def matchTest(x: Int): String = x match {
233249
(case_clause (integer_literal) (string) (string))
234250
(case_clause (integer_literal) (string))
235251
(case_clause (integer_literal) (block (string)))
252+
(case_clause (tuple_pattern (tuple_pattern (identifier) (wildcard))) (identifier))
236253
(case_clause (wildcard) (val_definition (identifier) (string)) (string))))))
237254

238255
===============================
@@ -403,6 +420,42 @@ object O {
403420
(ascription_expression (integer_literal)
404421
(repeated_parameter_type (type_identifier))))))
405422

423+
================================================================================
424+
Lambda Expression
425+
================================================================================
426+
427+
object O {
428+
val l = a => a + 1
429+
val b = (x: Int, y: Int) => { x * y }
430+
val f = _ => 2
431+
(a, b, _) => a - b
432+
}
433+
434+
--------------------------------------------------------------------------------
435+
436+
(compilation_unit
437+
(object_definition (identifier)
438+
(template_body (val_definition
439+
(identifier) (lambda_expression
440+
(identifier) (infix_expression
441+
(identifier) (operator_identifier) (integer_literal))))
442+
(val_definition (identifier)
443+
(lambda_expression (bindings
444+
(binding (identifier) (type_identifier))
445+
(binding (identifier) (type_identifier)))
446+
(block (infix_expression
447+
(identifier) (operator_identifier) (identifier)))))
448+
(val_definition (identifier)
449+
(lambda_expression (identifier) (integer_literal)))
450+
(lambda_expression
451+
(bindings
452+
(binding (identifier))
453+
(binding (identifier))
454+
(binding (identifier)))
455+
(infix_expression (identifier)
456+
(operator_identifier)
457+
(identifier))))))
458+
406459
===============================
407460
Unit expressions
408461
===============================
@@ -506,6 +559,7 @@ def f() = {
506559
x <- xs
507560
a = b + c
508561
y <- g() if d
562+
(t, u) = y
509563
} yield {
510564
h(x, y)
511565
}
@@ -529,8 +583,9 @@ def f() = {
529583
(for_expression
530584
(enumerators
531585
(enumerator (identifier) (identifier))
532-
(assignment_expression (identifier) (infix_expression (identifier) (operator_identifier) (identifier)))
533-
(enumerator (identifier) (call_expression (identifier) (arguments)) (guard (identifier))))
586+
(enumerator (identifier) (infix_expression (identifier) (operator_identifier) (identifier)))
587+
(enumerator (identifier) (call_expression (identifier) (arguments)) (guard (identifier)))
588+
(enumerator (tuple_pattern (identifier) (identifier)) (identifier)))
534589
(block (call_expression (identifier) (arguments (identifier) (identifier))))))))
535590

536591
===============================

0 commit comments

Comments
 (0)