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