* CM KCL: add annotations * Make AnnotationName a token that includes the @ * The text of AnnotationName is now optional (#5324) --------- Co-authored-by: Matt Mundell <matt@mundell.me>
		
			
				
	
	
		
			154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# alone
 | 
						|
 | 
						|
@a
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName))
 | 
						|
 | 
						|
# alone and anonymous
 | 
						|
 | 
						|
@
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName))
 | 
						|
 | 
						|
# empty
 | 
						|
 | 
						|
@ann()
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList))
 | 
						|
 | 
						|
# empty and anonymous
 | 
						|
 | 
						|
@()
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList))
 | 
						|
 | 
						|
# equals
 | 
						|
 | 
						|
@setting(a=1)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# operator
 | 
						|
 | 
						|
@ann(a*1)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     MultOp,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# anonymous
 | 
						|
 | 
						|
@(a=1)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# complex expr
 | 
						|
 | 
						|
@ann(a=(1+2+f('yes')))
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     ParenthesizedExpression(BinaryExpression(BinaryExpression(Number,
 | 
						|
                                                                                                               AddOp,
 | 
						|
                                                                                                               Number),
 | 
						|
                                                                                              AddOp,
 | 
						|
                                                                                              CallExpression(VariableName,
 | 
						|
                                                                                                             ArgumentList(String))))))))
 | 
						|
 | 
						|
# many args
 | 
						|
 | 
						|
@ann(a=1, b=2)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number),
 | 
						|
                                  AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# space around op
 | 
						|
 | 
						|
@ann(a / 1)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     MultOp,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# space around sep
 | 
						|
 | 
						|
@ann(a/1 , b/2)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     MultOp,
 | 
						|
                                                     Number),
 | 
						|
                                  AnnotationProperty(PropertyName,
 | 
						|
                                                     MultOp,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# trailing sep
 | 
						|
 | 
						|
@ann(a=1,)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number))))
 | 
						|
 | 
						|
# lone sep
 | 
						|
 | 
						|
@ann(,)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList))
 | 
						|
 | 
						|
# inside fn
 | 
						|
 | 
						|
fn f() {
 | 
						|
  @anno(b=2)
 | 
						|
}
 | 
						|
 | 
						|
==>
 | 
						|
Program(FunctionDeclaration(fn,
 | 
						|
                            VariableDefinition,
 | 
						|
                            ParamList,
 | 
						|
                            Body(Annotation(AnnotationName,
 | 
						|
                                            AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                                              Equals,
 | 
						|
                                                                              Number))))))
 | 
						|
 | 
						|
# laxer with space than the language parser is
 | 
						|
 | 
						|
@anno (b=2)
 | 
						|
 | 
						|
==>
 | 
						|
Program(Annotation(AnnotationName,
 | 
						|
                   AnnotationList(AnnotationProperty(PropertyName,
 | 
						|
                                                     Equals,
 | 
						|
                                                     Number))))
 |