/* ===================================================================== Source: general.rule ===================================================================== */ line_no : KW_LAST KW_MINUS INT_VALUE {$$=A4GL_new_literal_long_long(-1-(atoi($3)));} | KW_LAST {$$=A4GL_new_literal_long_long(-1);} | KW_FIRST KW_PLUS INT_VALUE {$$=A4GL_new_literal_long_long(atoi($3)+1);} | KW_FIRST {$$=A4GL_new_literal_long_long(1);} | INT_VALUE {$$=A4GL_new_literal_long_str($1);} | ensured_variable_usage_expression {$$=$1;} | KW_OFF {$$=A4GL_new_literal_long_long(0);} ; atline : {$$=token_read_on_line; A4GL_get_current_comments(token_read_on_line, token_read_on_col);} ; file_name : CHAR_VALUE {$$=new_variable_or_literal( ET_E_V_OR_LIT_STRING, $1); } | cvariable ; g_file_name : CHAR_VALUE {strcpy($$,$1); } ; /* a_number : fgl_expr_c; coords_pl : a_number KW_COMMA a_number { struct expr_str_list *l; l=A4GL_new_ptr_list($1); l=A4GL_new_append_ptr_list(l,A4GL_new_ptr_list($2); $$=l; } ; display_coords_pl : coords_pl; */ field_name_as_struct : identifier { $$=new_field_entry(A4GL_new_expr_simple_string($1,ET_EXPR_IDENTIFIER),NULL,1); } | INT_TO_ID OPEN_BRACKET identifier CLOSE_BRACKET { char buff[256]; SPRINTF1(buff,"int_to_id(%s)",$3); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER),NULL,0); } | identifier KW_DOT INT_TO_ID OPEN_BRACKET identifier CLOSE_BRACKET { char buff[256]; SPRINTF2(buff,"int_to_id(%s.%s)",$1,$5); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER),NULL,0); } | identifier OPEN_SQUARE arr_expr_e CLOSE_SQUARE { $$=new_field_entry(A4GL_new_expr_simple_string($1,ET_EXPR_IDENTIFIER),$3,1); } | identifier KW_DOT KW_MULTIPLY { char buff[256]; SPRINTF1(buff,"%s.*",$1); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER), NULL,1); add_feature("SRECDOTSTAR"); } | identifier OPEN_SQUARE arr_expr_e CLOSE_SQUARE KW_DOT KW_MULTIPLY { char buff[256]; SPRINTF1(buff,"%s.*",$1); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER),$3,1); add_feature("SRECDOTSTAR"); } | identifier KW_DOT identifier { char buff[256]; SPRINTF2(buff,"%s.%s",$1,$3); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER),NULL,1); } | identifier OPEN_SQUARE arr_expr_e CLOSE_SQUARE KW_DOT identifier { char buff[256]; SPRINTF2(buff,"%s.%s",$1,$6); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_EXPR_IDENTIFIER),$3,1); } | VARIABLE OPEN_BRACKET char_or_var_vl CLOSE_BRACKET { $$=new_field_entry($3,NULL,0); } | VARIABLE OPEN_BRACKET char_or_var_vl KW_COMMA arr_expr_e CLOSE_BRACKET { $$=new_field_entry($3,$5,0); } ; field_name_or_char_as_struct: field_name_as_struct {$$=$1;} | CHAR_VALUE { char buff[256]; SPRINTF1(buff,"%s",$1); $$=new_field_entry(A4GL_new_expr_simple_string(buff,ET_E_V_OR_LIT_STRING),NULL,0); } ; cursor_name_1_p : ident_or_var_sql_p { $$=$1; } ; put_cursor_name_p : ident_or_var_sql_p {$$=$1; } ; fetch_cursor_name_p : ident_or_var_sql_p {$$=$1; } ; win_name_p : ident_or_var_p {$$=$1; ADDMAP_P("Window",$1); } ; open_win_name_p : ident_or_var_p { $$=$1; ADDMAP_P("Window",$1); } ; form_name_p : ident_or_var_p { $$=$1; ADDMAP_P("Form",$1); } ; open_form_name_p : ident_or_var_p { $$=$1; ADDMAP_P("Open Form",$1); } ; opt_help_no_i : {$$=0; } | KW_HELP INT_VALUE {$$=atoi($2);}; identifier : NAMED { strcpy($$,downshift($1)) ; } ; ident_or_var_p : ident_p2 { $1=$1; } ; ident_or_var_sql_p: ident_p2_sql { $1=$1; } ; ident_p2 : NAMED { //@ FIXME strcpy($$,downshift($1)); strcpy(last_var,$$); strcpy($$,do_clobbering(&this_module, clobber,downshift($1))) ; $$=A4GL_new_expr_simple_string($$, ET_EXPR_IDENTIFIER); } | VARIABLE OPEN_BRACKET char_or_var_vl CLOSE_BRACKET { $$=A4GL_new_expr_simple_expr($3, ET_EXPR_VARIABLE_IDENTIFIER); } ; ident_p2_sql : NAMED { strcpy($$,do_clobbering_sql(&this_module, clobber,downshift($1))) ; strcpy(last_var,downshift($$)); $$=A4GL_new_expr_simple_string($$, ET_EXPR_IDENTIFIER); } | VARIABLE OPEN_BRACKET char_or_var_vl CLOSE_BRACKET { $$=A4GL_new_expr_simple_expr($3, ET_EXPR_VARIABLE_IDENTIFIER); } ; cvariable : ensured_variable_usage_expression { char errbuff[256]; int dtype; dtype=get_variable_dtype_from_variable_usage_expression(errbuff,$1); if (dtype==-1) { a4gl_yyerror(errbuff); YYERROR; } else { dtype=dtype &DTYPE_MASK; if (dtype!=DTYPE_CHAR && dtype!=DTYPE_VCHAR && dtype!=DTYPE_NCHAR ) { a4gl_yyerror("Only a character variable can be used for this"); YYERROR; } } $$=$1; } ; conn_id_p : ident_or_var_sql_p; real_number : NUMBER_VALUE | KW_DOT INT_VALUE { SPRINTF1($$,".%s",$2); }; char_or_var_vl : CHAR_VALUE { $$=new_variable_or_literal(ET_E_V_OR_LIT_STRING, $1); } | variable_usage_expression { char errbuff[256]; int dtype; dtype=get_variable_dtype_from_variable_usage_expression(errbuff,$1); if (dtype==-1) { a4gl_yyerror(errbuff); YYERROR; } else { dtype=dtype&DTYPE_MASK; if (dtype!=DTYPE_CHAR&&dtype!=DTYPE_VCHAR && dtype!=DTYPE_NCHAR) { a4gl_yyerror("Variable must be of type char..");YYERROR; } } $$=$1; inc_var_usage($$); } ; char_or_var_vl_or_object : CHAR_VALUE { $$=new_variable_or_literal(ET_E_V_OR_LIT_STRING, $1); } | variable_usage_expression { char errbuff[256]; int dtype; dtype=get_variable_dtype_from_variable_usage_expression(errbuff,$1); if (dtype==-1) { a4gl_yyerror(errbuff); YYERROR; } else { dtype=dtype&DTYPE_MASK; if (dtype!=DTYPE_CHAR&&dtype!=DTYPE_VCHAR && dtype!=DTYPE_NCHAR) { if (dtype!=DTYPE_OBJECT) { a4gl_yyerror("Variable must be of type char..");YYERROR; } } } $$=$1; inc_var_usage($$); } ; opt_use2_p : {$$=0; set_cmdlineno(yylineno); } | USE_SESSION conn_id_p KW_FOR { $$=$2; set_cmdlineno(yylineno); } ; /* ============================ general.rule ====================== */