1dot_expr(Data,bool,startswith(Str1,Str2)) -->
    2	startswith_(Data,[
    3		parentheses_expr(Data,string,Str1),
    4		parentheses_expr(Data,string,Str2)
    5	]).
    6
    7
    8
    9dot_expr(Data,bool,endswith(Str1,Str2)) -->
   10	endswith_(Data,[
   11		parentheses_expr(Data,string,Str1),
   12		expr(Data,string,Str2)
   13	]).
   14
   15dot_expr(Data,[array,Type],array_slice(Str,Index1,Index2)) -->
   16        array_slice_(Data,[
   17			parentheses_expr(Data,[array,Type],Str),
   18			parentheses_expr(Data,int,Index1),
   19			parentheses_expr(Data,int,Index2)
   20        ]).
   21
   22dot_expr(Data,string,join_(Array,Separator)) -->
   23	join_(Data,[
   24		parentheses_expr(Data,[array,string],Array),
   25		parentheses_expr(Data,string,Separator)
   26	]).
   27
   28dot_expr(Data,int,random_int_in_range(Start,End)) -->
   29	random_int_in_range(Data,[
   30		expr(Data,int,Start),
   31		expr(Data,int,End)
   32	]).
   33
   34dot_expr(Data,double,sqrt(Exp1)) -->
   35	sqrt(Data,[expr(Data,double,Exp1)]).
   36
   37
   38dot_expr(Data,Type,list_comprehension(Result,Var,Condition,Array)) -->
   39	list_comprehension_(Data,[
   40		var_name_(Data,Type,Var),
   41		expr(Data,[array,Type],Array),
   42		expr(Data,Type,Result),
   43		expr(Data,bool,Condition)
   44	]).
   45
   46dot_expr(Data,[array,Type],reverse_list(List,Type)) -->
   47	reverse_list_(Data,[
   48		parentheses_expr(Data,[array,Type],List)
   49	]),!.
   50 
   51dot_expr(Data,string,reverse_string(Str)) -->
   52	reverse_string_(Data,[
   53		expr(Data,string,Str)
   54	]),!.
   55 
   56%https://en.wikipedia.org/wiki/Comparison_of_programming_languages_(string_functions)#trim
   57dot_expr(Data,string,trim(Str)) -->
   58	trim_(Data,[
   59		parentheses_expr(Data,string,Str)
   60	]),!.
   61
   62%https://en.wikipedia.org/wiki/Comparison_of_programming_languages_(string_functions)#trim
   63dot_expr(Data,string,lstrip(Str)) -->
   64	lstrip_(Data,[
   65		parentheses_expr(Data,string,Str)
   66	]),!.
   67
   68%https://en.wikipedia.org/wiki/Comparison_of_programming_languages_(string_functions)#trim
   69dot_expr(Data,string,rstrip(Str)) -->
   70	rstrip_(Data,[
   71		parentheses_expr(Data,string,Str)
   72	]),!.
   73
   74%all characters to lowercase
   75dot_expr(Data,string,lowercase(Str)) -->
   76	lowercase_(Data,[
   77		parentheses_expr(Data,string,Str)
   78	]),!.
   79
   80%all characters to uppercase
   81dot_expr(Data,string,uppercase(Str)) -->
   82	uppercase_(Data,[
   83		parentheses_expr(Data,string,Str)
   84	]),!.
   85
   86dot_expr(Data,int,strlen(A)) -->
   87	strlen_(Data,[parentheses_expr(Data,string,A)]).
   88
   89dot_expr(Data,int,array_length(A,Type)) -->
   90	array_length(Data,[
   91		parentheses_expr(Data,[array,Type],A)
   92	]).
   93
   94dot_expr(Data,Type,parentheses_expr(A)) --> 
   95	parentheses_expr(Data,Type,A)