%start module //%start move_cmd %token NAMED_GEN %left COMMA %left OR %left AND %left USING MATCHES %left POWER %left LESS_THAN GREATER_THAN EQUAL GREATER_THAN_EQ LESS_THAN_EQ NOT_EQUAL %left MINUS PLUS %left DIVIDE MULTIPLY MOD %token NUMBER_VALUE %token SQLERROR SQLWARNING %token CHAR_VALUE %token INT_VALUE %token NAMED_GEN %token CLINE %token SQLLINE %token KW_CSTART %token KW_CEND %token WAIT_FOR_KEY 1000 %token UP_BY 1001 %token DOWN_BY 1002 %token ADD_CONSTRAINT 1003 %token DROP_CONSTRAINT 1004 %token MODIFY_NEXT_SIZE 1005 %token LOCK_MODE_PAGE 1006 %token LOCK_MODE_ROW 1007 %token TO_PIPE 1008 %token TO_PRINTER 1009 %token CONNECT_TO 1010 %token UNITS_YEAR 1011 %token UNITS_MONTH 1012 %token UNITS_DAY 1013 %token UNITS_HOUR 1014 %token UNITS_MINUTE 1015 %token UNITS_SECOND 1016 %token NO_NEW_LINES 1017 %token FIELDTOWIDGET 1018 %token WITH_HOLD 1019 %token SHOW_MENU 1020 %token CWIS 1021 %token CREATE_IDX 1022 %token FORM_IS_COMPILED 1023 %token PDF_REPORT 1024 %token IMPORT_FUNCTION 1025 %token PROMPT_MANY 1026 %token POINTS 1027 %token MM 1028 %token INCHES 1029 %token PREPEND 1030 %token MEMBER_OF 1031 %token MEMBER_FUNCTION 1032 %token APPEND 1033 %token TEMPLATE 1034 %token END_TEMPLATE 1035 %token SQLSICS 1036 %token CREATE_SCHEMA 1037 %token SQLSIRR 1038 %token UPDATESTATS_T 1039 %token SQLSICR 1040 %token WHENEVER_SQLSUCCESS 1041 %token WHENEVER_SQLWARNING 1042 %token START_EXTERN 1043 %token WHENEVER_ANY_ERROR 1044 %token WHENEVER_NOT_FOUND 1045 %token CONTINUE_CONSTRUCT 1046 %token FOUNCONSTR 1047 %token SQLSIDR 1048 %token WHENEVER_SQLERROR 1049 %token CREATE_TEMP_TABLE 1050 %token CURRENT_WINDOW_IS 1051 %token FIRST_PAGE_HEADER 1052 %token ORDER_EXTERNAL_BY 1053 %token SCROLL_CURSOR_FOR 1054 %token SCROLL_CURSOR 1055 %token SQL_INTERRUPT_OFF 1056 %token STOP_ALL_EXTERNAL 1057 %token WITH_CHECK_OPTION 1058 %token WITH_GRANT_OPTION 1059 %token SQLSLMNW 1060 %token ADDCONSTUNIQ 1061 %token CONTINUE_DISPLAY 1062 %token CONTINUE_FOREACH 1063 %token OUTPUT_TO_REPORT 1064 %token SQL_INTERRUPT_ON 1065 %token WHENEVER_SUCCESS 1066 %token WHENEVER_WARNING 1067 %token WHERE_CURRENT_OF 1068 %token WITHOUT_DEFAULTS 1069 %token FOCONSTR 1070 %token SCALED_BY 1071 %token CONTINUE_PROMPT 1072 %token PDF_FUNCTION 1073 %token DEFER_INTERRUPT 1074 %token DISPLAY_BY_NAME 1075 %token NOT_NULL_UNIQUE 1076 %token SKIP_TO_TOP 1077 %token TOP_OF_PAGE 1078 %token SKIP_TO 1079 %token SKIP_BY 1080 %token WITHOUT_WAITING 1081 %token BEFCONSTRUCT 1082 %token SQLSLMW 1083 %token WHENEVER_ERROR_CONTINUE 1084 %token WHENEVER_ERROR 1085 %token AFTCONSTRUCT 1086 %token ALL_PRIVILEGES 1087 %token CLOSE_DATABASE 1088 %token CONTINUE_INPUT 1089 %token CONTINUE_WHILE 1090 %token CREATE_SYNONYM 1091 %token DROP_TABLE 1092 %token EXIT_CONSTRUCT 1093 %token INEXCLUSIVE 1094 %token REPORT_TO_PIPE 1095 %token SET_SESSION_TO 1096 %token UPDATESTATS 1097 %token WITHOUT_HEAD 1098 %token CLEARSCR 1099 %token WITH_B_LOG 1100 %token AUTHORIZATION 1101 %token BOTTOM_MARGIN 1102 %token CLOSE_SESSION 1103 %token CONTINUE_CASE 1104 %token CONTINUE_MENU 1105 %token DISPLAY_ARRAY 1106 %token END_CONSTRUCT 1107 %token FIELD_TOUCHED 1108 %token FINISH_REPORT 1109 %token INFACC 1110 %token INPUT_NO_WRAP 1111 %token LOCKMODEPAGE 1112 %token SETPMOFF 1113 %token UNCONSTRAINED 1114 %token PAGE_TRAILER 1115 %token SETPMON 1116 %token BEFGROUP 1117 %token CLOSE_WINDOW 1118 %token COMMENT_LINE 1119 %token CONTINUE_FOR 1120 %token CREATE_DB 1121 %token CREATE_TABLE 1122 %token DEFAULT_NULL 1123 %token DELETE_USING 1124 %token DISPLAY_FORM 1125 %token END_FUNCTION 1126 %token EXIT_DISPLAY 1127 %token EXIT_FOREACH 1128 %token EXIT_PROGRAM 1129 %token INFCOLS 1130 %token LOCKMODEROW 1131 %token ON_EVERY_ROW 1132 %token OPEN_SESSION 1133 %token RIGHT_MARGIN 1134 %token SELECT_USING 1135 %token START_REPORT 1136 %token UNLOCK_TABLE 1137 %token UPDATE_USING 1138 %token ACL_BUILTIN 1139 %token AFTGROUP 1140 %token INFIDX 1141 %token INFSTAT 1142 %token LEFT_MARGIN 1143 %token PAGE_HEADER 1144 %token ROLLBACK_W 1145 %token SET_SESSION 1146 %token SQLSEOFF 1147 %token WITH_A_LOG 1148 %token ALTER_TABLE 1149 %token BEFDISP 1150 %token BEFORE_MENU 1151 %token CREATE_VIEW 1152 %token DEFINE_TYPE 1153 %token DELETE_FROM 1154 %token END_DISPLAY 1155 %token END_REPORT 1156 %token END_FOREACH 1157 %token END_GLOBALS 1158 %token EXIT_PROMPT 1159 %token EXTENT_SIZE 1160 %token FOREIGN_KEY 1161 %token HIDE_OPTION 1162 %token HIDE_WINDOW 1163 %token INSERT_INTO 1164 %token IS_NOT_NULL 1165 %token MOVE_WINDOW 1166 %token NEXT_OPTION 1167 %token NOT_MATCHES 1168 %token ON_LAST_ROW 1169 %token OPEN_WINDOW 1170 %token PAGE_LENGTH 1171 %token PAGE_WIDTH 1172 %token PRIMARY_KEY 1173 %token PROMPT_LINE 1174 %token RECORD_LIKE 1175 %token ROLLFORWARD 1176 %token SETBL 1177 %token SHOW_OPTION 1178 %token SHOW_WINDOW 1179 %token SQLSEON 1180 %token TO_DATABASE 1181 %token USE_SESSION 1182 %token WITH_NO_LOG 1183 %token AFTDISP 1184 %token BEFFIELD 1185 %token INSHARE 1186 %token UNLOCKTAB 1187 %token AFTFIELD 1188 %token ATTRIBUTES 1189 %token BEFINP 1190 %token BEGIN_WORK 1191 %token CLEARWIN 1192 %token CLOSE_FORM 1193 %token DEFER_QUIT 1194 %token DESCENDING 1195 %token DROP_INDEX 1196 %token END_PROMPT 1197 %token END_RECORD 1198 %token ERROR_LINE 1199 %token EXIT_INPUT 1200 %token EXIT_WHILE 1201 %token FOR_UPDATE_OF 1202 %token FOR_UPDATE 1203 %token GET_FLDBUF 1204 %token INITIALIZE 1205 %token INPUT_WRAP 1206 %token LOCK_TABLE 1207 %token MSG_LINE 1208 %token NOT_EXISTS 1209 %token ON_ANY_KEY 1210 %token REFERENCES 1211 %token RENCOL 1212 %token SET_CURSOR 1213 %token SMALLFLOAT 1214 %token SQLSUCCESS 1215 %token TOP_MARGIN 1216 %token WITH_ARRAY 1217 %token ACCEPTKEY 1218 %token ACCEPT 1219 %token AFTINP 1220 %token CLEARFORM 1221 %token COMMIT_W 1222 %token CTRL_KEY 1223 %token INFTABS 1224 %token NEXTFIELD 1225 %token RENTAB 1226 %token ASCENDING 1227 %token ASSOCIATE 1228 %token CHARACTER 1229 %token CONSTRUCT 1230 %token DELIMITER 1231 %token DOWNSHIFT 1232 %token DROP_VIEW 1233 %token END_INPUT 1234 %token END_WHILE 1235 %token EXCLUSIVE 1236 %token EXIT_CASE 1237 %token EXIT_MENU 1238 %token FORM_LINE 1239 %token GREATER_THAN_EQ 1240 %token INTERRUPT 1241 %token INTO_TEMP 1242 %token INVISIBLE 1243 %token IN_MEMORY 1244 %token LINKED_TO 1245 %token LOAD_FROM 1246 %token LOCKTAB 1247 %token MENU_LINE 1248 %token OPEN_FORM 1249 %token OTHERWISE 1250 %token PRECISION 1251 %token PROCEDURE 1252 %token REPORT_TO 1253 %token RETURNING 1254 %token UNDERLINE 1255 %token UNLOAD_TO 1256 %token BEFROW 1257 %token UNLOAD_T 1258 %token VARIABLE 1259 %token ABSOLUTE 1260 %token AFTROW 1261 %token BUFFERED 1262 %token CONSTANT 1263 %token CONTINUE 1264 %token DATABASE 1265 %token DATETIME 1266 %token DEFAULTS 1267 %token DISTINCT 1268 %token END_CASE 1269 %token END_MAIN 1270 %token END_MENU 1271 %token END_TYPE 1272 %token EXIT_FOR 1273 %token EXTERNAL 1274 %token FRACTION 1275 %token FUNCTION 1276 %token GROUP_BY 1277 %token INTERVAL 1278 %token KWMESSAGE 1279 %token NOT_LIKE 1280 %token NOT_NULL 1281 %token PASSWORD 1282 %token PREVIOUS 1283 %token READONLY 1284 %token REGISTER 1285 %token RELATIVE 1286 %token RESOURCE 1287 %token SMALLINT 1288 %token VALIDATE 1289 %token WHENEVER 1290 %token WITH_LOG 1291 %token WORDWRAP 1292 %token BY_NAME 1293 %token IN_FILE 1294 %token IS_NULL 1295 %token LESS_THAN_EQ 1296 %token AVERAGE 1297 %token BETWEEN 1298 %token CAPTION 1299 %token CLIPPED 1300 %token CLOSE_BRACKET 1301 %token COLUMNS 1302 %token COMMAND 1303 %token COMMENT 1304 %token CONNECT 1305 %token CURRENT 1306 %token DBYNAME 1307 %token DECIMAL 1308 %token DECLARE 1309 %token DEFAULT 1310 %token DISPLAY 1311 %token ENDCODE 1312 %token EXECUTE 1313 %token FOREACH 1314 %token FOREIGN 1315 %token GLOBALS 1316 %token INFIELD 1317 %token INTEGER 1318 %token KWWINDOW 1319 %token MAGENTA 1320 %token MATCHES 1321 %token NUMERIC 1322 %token OPTIONS 1323 %token PERCENT 1324 %token PREPARE 1325 %token PROGRAM 1326 %token RECOVER 1327 %token REVERSE 1328 %token SECTION 1329 %token SESSION 1330 %token SYNONYM 1331 %token THRU 1332 %token TRAILER 1333 %token UPSHIFT 1334 %token VARCHAR 1335 %token WAITING 1336 %token CLOSE_SHEV 1337 %token CLOSE_SQUARE 1338 %token GREATER_THAN 1339 %token KW_FALSE 1340 %token NOT_IN 1341 %token ON_KEY 1342 %token OPEN_BRACKET 1343 %token BORDER 1344 %token BOTTOM 1345 %token COLUMN 1346 %token COMMIT 1347 %token CREATE 1348 %token CURSOR 1349 %token DEFINE 1350 %token DELETE 1351 %token DOUBLE 1352 %token END_IF 1353 %token ESCAPE 1354 %token EXISTS 1355 %token EXTEND 1356 %token EXTENT 1357 %token FINISH 1358 %token FORMAT 1359 %token HAVING 1360 %token HEADER 1361 %token INSERT 1362 %token LOCATE 1363 %token MARGIN 1364 %token MEMORY 1365 %token MINUTE 1366 %token MODIFY 1367 %token NORMAL 1368 %token EQUAL_EQUAL 1369 %token NOT_EQUAL 1370 %token OPEN_SHEV 1371 %token OPEN_SQUARE 1372 %token OPTION 1373 %token OUTPUT 1374 %token PROMPT 1375 %token PUBLIC 1376 %token RECORD 1377 %token REPORT 1378 %token RETURN 1379 %token REVOKE 1380 %token SCHEMA 1381 %token SCROLL 1382 %token SECOND 1383 %token SELECT 1384 %token SERIAL 1385 %token SETL 1386 %token SHARED 1387 %token SPACES 1388 %token UNIQUE 1389 %token UNLOCK 1390 %token UPDATE 1391 %token VALUES 1392 %token YELLOW 1393 %token AFTER 1394 %token KWLINE 1395 %token KW_NULL 1396 %token KW_TRUE 1397 %token SINGLE_KEY 1398 %token ALTER 1399 %token ARRAY 1400 %token ASCII 1401 %token AUDIT 1402 %token BLACK 1403 %token BLINK 1404 %token CHECK 1405 %token CLEAR 1406 %token CLOSE 1407 %token CODE_C 1408 %token COUNT 1409 %token DEFER 1410 %token ERROR 1411 %token EVERY 1412 %token FETCH 1413 %token FIRST 1414 %token FLOAT 1415 %token FLUSH 1416 %token FOUND 1417 %token GRANT 1418 %token GREEN 1419 %token GROUP 1420 %token INDEX 1421 %token KWFORM 1422 %token LABEL 1423 %token LESS_THAN 1424 %token LOCAL 1425 %token MONEY 1426 %token MONTH 1427 %token POWER 1428 %token MULTIPLY 1429 %token ORDER 1430 %token OUTER 1431 %token PAUSE 1432 %token PRINT_IMAGE 1433 %token PRINT_FILE 1434 %token PRINT 1435 %token PRIOR 1436 %token RIGHT 1437 %token SEMICOLON 1438 %token SLEEP 1439 %token SPACE 1440 %token TUPLE 1441 %token UNION 1442 %token USING 1443 %token WHERE 1444 %token WHILE 1445 %token WHITE 1446 %token CCODE 1447 %token ANSI 1448 %token BLUE 1449 %token BOLD 1450 %token BYTE 1451 %token FCALL 1452 %token CASE 1453 %token CHAR 1454 %token CYAN 1455 %token DATE 1456 %token DESC 1457 %token DIVIDE 1458 %token DOWN 1459 %token TAB 1460 %token DROP 1461 %token ELSE 1462 %token EXEC 1463 %token EXIT 1464 %token FREE 1465 %token FROM 1466 %token GOTO 1467 %token HELP_FILE 1468 %token HELP 1469 %token HIDE 1470 %token HOUR 1471 %token INTO 1472 %token LAST 1473 %token LEFT 1474 %token LIKE 1475 %token MAIN 1476 %token MENU 1477 %token MODE 1478 %token MOVE 1479 %token NEED 1480 %token NEXT 1481 %token NOCR 1482 %token OPEN 1483 %token QUIT 1484 %token REAL 1485 %token ROWS 1486 %token SHOW 1487 %token SIZE 1488 %token SKIP 1489 %token SOME 1490 %token STEP 1491 %token STOP 1492 %token TEMP 1493 %token TEXT 1494 %token THEN 1495 %token USER 1496 %token VIEW 1497 %token WAIT 1498 %token WHEN 1499 %token WITH 1500 %token WORK 1501 %token YEAR 1502 %token EQUAL 1503 %token KW_IS 1504 %token XSET 1505 %token ADD 1506 %token ALL 1507 %token AND 1508 %token ANY 1509 %token ASC 1510 %token AVG 1511 %token COLON 1512 %token COMMA 1513 %token DAY 1514 %token DBA 1515 %token DEC 1516 %token DIM 1517 %token FKEY 1518 %token FOR 1519 %token KEY 1520 %token KWNO 1521 %token LET 1522 %token LOG 1523 %token XMAX 1524 %token XMIN 1525 %token MINUS 1526 %token MOD 1527 %token NOT 1528 %token PAD 1529 %token PUT 1530 %token RED 1531 %token ROW 1532 %token RUN 1533 %token SQL 1534 %token SUM 1535 %token TOP 1536 %token USE 1537 %token PLUS 1538 %token AS_TIFF 1539 %token AS_GIF 1540 %token AS_PNG 1541 %token AS_JPEG 1542 %token AS 1543 %token AT 1544 %token BY 1545 %token DOT 1546 %token GO 1547 %token IF 1548 %token IN 1549 %token OF 1550 %token ON 1551 %token OR 1552 %token TO 1553 %token UP 1554 %token FONT_NAME 1555 %token FONT_SIZE 1556 %token PAPER_SIZE_IS_LETTER 1557 %token PAPER_SIZE_IS_LEGAL 1558 %token PAPER_SIZE_IS_A4 1559 %token FORMHANDLER 1560 %token END_FORMHANDLER 1561 %token BEFORE_EVENT 1562 %token BEFORE_OPEN_FORM 1563 %token AFTER_EVENT 1564 %token BEFORE_CLOSE_FORM 1565 %token BEFORE_ANY 1566 %token AFTER_ANY 1567 %token MENUHANDLER 1568 %token END_MENUHANDLER 1569 %token BEFORE_SHOW_MENU 1570 %token DISABLE_PROGRAM 1571 %token DISABLE_ALL 1572 %token AT_TERMINATION_CALL 1573 %token BUTTONS 1574 %token BUTTONS_ABORT_RETRY_IGNORE 1575 %token BUTTONS_OK 1576 %token BUTTONS_OK_CANCEL 1577 %token BUTTONS_RETRY_CANCEL 1578 %token BUTTONS_YES_NO 1579 %token BUTTONS_YES_NO_CANCEL 1580 %token BUTTON_ABORT 1581 %token BUTTON_CANCEL 1582 %token BUTTON_IGNORE 1583 %token BUTTON_NO 1584 %token BUTTON_OK 1585 %token BUTTON_RETRY 1586 %token BUTTON_YES 1587 %token CHECK_MENUITEM 1588 %token DISABLE_FORM 1589 %token DISABLE_MENUITEMS 1590 %token DISABLE 1591 %token ENABLE_FORM 1592 %token ENABLE_MENUITEMS 1593 %token ENABLE 1594 %token KWFIELD 1595 %token ICON 1596 %token MESSAGEBOX 1597 %token TO_DEFAULTS 1598 %token UNCHECK_MENUITEM 1599 %token BEFORE 1600 %token INPUT 1601 %token END 1602 %% pause_screen_cmd : SETPMON | SETPMOFF ; start_rpc_cmd : START_EXTERN valid_port CLOSE_SQUARE FOR remote_func_list ; stop_rpc_cmd : STOP_ALL_EXTERNAL ; valid_port : variable | INT_VALUE ; remote_func_list : remote_func | remote_func_list COMMA remote_func ; remote_func : identifier ; arr_expr : OPEN_BRACKET arr_expr CLOSE_BRACKET | arr_expr arr_next | INT_VALUE | arr_int_sign INT_VALUE | variable ; arr_next : PLUS arr_expr | MINUS arr_expr | MULTIPLY arr_expr | DIVIDE arr_expr | MOD arr_expr ; arr_int_sign : PLUS | MINUS ; opt_attributes : /*empty*/ | attributes_def ; attributes_def : ATTRIBUTES OPEN_BRACKET attribs_sec CLOSE_BRACKET ; attribs_sec : attribute | attribs_sec COMMA attribute ; attribute : BLACK | BLUE | CYAN | GREEN | MAGENTA | RED | WHITE | YELLOW | REVERSE | BLINK | UNDERLINE | BOLD | NORMAL | INVISIBLE | DIM | NO_NEW_LINES ; win_attributes : /*empty*/ | win_attributes_def ; win_attributes_def : ATTRIBUTES OPEN_BRACKET wattribs_sec CLOSE_BRACKET ; wattribs_sec : wattribute | wattribs_sec COMMA wattribute ; wattribute : attribute | BORDER | PAD CHAR_VALUE | COMMENT_LINE line_no | FORM_LINE line_no | ERROR_LINE line_no | MENU_LINE line_no | MSG_LINE line_no | PROMPT_LINE line_no ; call_cmd : FCALL call_ext ; call_ext : function_callb RETURNING variable | GET_FLDBUF OPEN_BRACKET fld_list CLOSE_BRACKET RETURNING ibind_var_list | FORM_IS_COMPILED OPEN_BRACKET identifier CLOSE_BRACKET | INFIELD OPEN_BRACKET field_name CLOSE_BRACKET RETURNING variable | pdf_functions | FIELD_TOUCHED OPEN_BRACKET field_name CLOSE_BRACKET RETURNING variable | identifier OPEN_BRACKET opt_func_call_args CLOSE_BRACKET opt_return | SHARED char_or_var IN char_or_var OPEN_BRACKET opt_func_call_args CLOSE_BRACKET opt_return | EXTERNAL remote_host_name COLON remote_func_name OPEN_SQUARE valid_port CLOSE_SQUARE OPEN_BRACKET opt_func_call_args CLOSE_BRACKET opt_return_remote ; opt_return : /* empty */ | RETURNING ibind_var_list ; opt_return_remote : /* empty */ | RETURNING ibind_var_list | WITHOUT_WAITING ; opt_func_call_args : /*empty*/ | func_call_args ; func_call_args : func_arg | func_call_args COMMA func_arg ; rcvd_variables : variable | rcvd_variables COMMA variable ; func_arg : fgl_expr_c ; remote_host_name : CHAR_VALUE | identifier ; remote_func_name : identifier ; case_cmd : CASE fgl_expr when_unit_expr op_otherwise_command_expr end_case_command | CASE when_unit op_otherwise_command end_case_command ; when_unit : when_command | when_unit when_command ; when_unit_expr : when_command_expr | when_unit_expr when_command_expr ; end_case_command : END_CASE ; op_otherwise_command : /* empty */ | OTHERWISE commands ; op_otherwise_command_expr : /* empty */ | OTHERWISE commands ; when_command : WHEN fgl_expr commands ; when_command_expr : WHEN fgl_expr commands ; close_cmd : CLOSE_FORM form_name | CLOSE_WINDOW win_name | CLOSE_DATABASE | CLOSE_SESSION conn_id | CLOSE fetch_cursor_name ; code_cmd : KW_CSTART emb_code KW_CEND ; emb_code : sql_code | c_code ; sql_code : sql_code_part | sql_code sql_code_part ; sql_code_part : SQLLINE ; c_code : c_code_part | c_code c_code_part ; c_code_part : CLINE ; comment_cmd : COMMENT ; construct_cmd : CONSTRUCT constr_rest end_constr ; constr_rest : BY_NAME variable ON constr_col_list opt_defs opt_attributes | variable ON constr_col_list opt_defs FROM fld_list opt_attributes ; end_constr : /* empty */ | constr_extra_commands END_CONSTRUCT ; constr_col_list : constr_col | constr_col_list COMMA constr_col ; constr_col : identifier | identifier DOT identifier | identifier DOT MULTIPLY ; constr_extra_commands : constr_extra_command | constr_extra_commands constr_extra_command ; constr_extra_command : BEFFIELD bef_c_field_list commands | AFTFIELD aft_c_field_list commands | on_key_command commands | AFTCONSTRUCT commands | BEFCONSTRUCT commands ; bef_c_field_list : field_name2 | bef_c_field_list COMMA field_name2 ; aft_c_field_list : field_name2 | aft_c_field_list COMMA field_name2 ; interval_expr : UNITS_YEAR | UNITS_MONTH | UNITS_DAY | UNITS_HOUR | UNITS_MINUTE | UNITS_SECOND ; defer_cmd : DEFER_INTERRUPT | DEFER_QUIT ; define_section : /* empty */ | define_multiple ; define_multiple : define_set | define_multiple define_set ; define_set : DEFINE def_part | dim_section ; def_part : def_part2 | def_part COMMA def_part2 ; def_part2 : CONSTANT identifier op_equal CHAR_VALUE | CONSTANT identifier op_equal real_number | CONSTANT identifier op_equal INT_VALUE | var_def_list dtype_ident ; var_def_name : identifier ; var_def_list : var_def_name | var_def_list COMMA var_def_name ; op_char : /* empty */ | CHAR ; array_variable : ARRAY OPEN_SQUARE number_arr_list CLOSE_SQUARE OF dtype_ident | ASSOCIATE op_char assoc_open_bracket INT_VALUE assoc_close_bracket WITH_ARRAY OPEN_SQUARE number_arr_assoc CLOSE_SQUARE OF dtype_ident ; assoc_open_bracket : OPEN_BRACKET | OPEN_SHEV ; assoc_close_bracket : CLOSE_BRACKET | CLOSE_SHEV ; number_arr_assoc : INT_VALUE ; number_arr_list : number_value_arr COMMA number_value_arr COMMA number_value_arr | number_value_arr COMMA number_value_arr | number_value_arr ; number_value_arr : INT_VALUE ; record_variable : RECORD def_part END_RECORD | RECORD_LIKE identifier DOT MULTIPLY | LINKED_TO identifier PRIMARY_KEY OPEN_BRACKET link_to_pk_list CLOSE_BRACKET ; link_to_pk_list : link_to_pk | link_to_pk_list COMMA link_to_pk ; link_to_pk : identifier ; dtype_ident : dtype2 ; dtype2 : dtype ; dtype : array_variable | record_variable | CHAR | CHAR OPEN_BRACKET INT_VALUE CLOSE_BRACKET | VARCHAR OPEN_BRACKET INT_VALUE CLOSE_BRACKET | VARCHAR OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | INTEGER | AS identifier | SMALLINT | DECIMAL | DECIMAL OPEN_BRACKET INT_VALUE CLOSE_BRACKET | DECIMAL OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | MONEY | MONEY OPEN_BRACKET INT_VALUE CLOSE_BRACKET | MONEY OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | FLOAT | SMALLFLOAT | DATE | BYTE | TEXT | DATETIME datetime_qual | INTERVAL interval_qual | like_var ; like_var : LIKE tab_name DOT col_name ; tab_name : identifier ; col_name : identifier ; datetime_qual : /* empty */ | dtime_start TO dtime_end ; interval_qual : int_start TO int_end ; dtime_start : dtime_val ; dtime_val : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION opt_frac ; dtime_end : dtime_val ; opt_frac : /* empty */ | OPEN_BRACKET dtfrac CLOSE_BRACKET ; dtfrac : INT_VALUE ; int_start : int_start_unit opt_frac ; int_start_unit : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION opt_frac ; int_end : int_start_unit ; op_equal : /* empty */ | EQUAL ; dim_section : DEFINE_TYPE identifier AS dim_dtype ; dim_dtype : dim_array_variable | dim_record_variable | CHAR | CHAR OPEN_BRACKET INT_VALUE CLOSE_BRACKET | VARCHAR OPEN_BRACKET INT_VALUE CLOSE_BRACKET | VARCHAR OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | INTEGER | SMALLINT | KWFORM | DECIMAL | DECIMAL OPEN_BRACKET INT_VALUE CLOSE_BRACKET | DECIMAL OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | MONEY | MONEY OPEN_BRACKET INT_VALUE CLOSE_BRACKET | MONEY OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET | FLOAT | SMALLFLOAT | DATE | BYTE | TEXT | DATETIME datetime_qual | INTERVAL interval_qual | dim_like_var ; dim_like_var : LIKE tab_name DOT col_name ; dim_array_variable : ARRAY OPEN_SQUARE number_arr_list CLOSE_SQUARE OF dim_dtype | ASSOCIATE op_char assoc_open_bracket INT_VALUE assoc_close_bracket WITH_ARRAY OPEN_SQUARE number_arr_assoc CLOSE_SQUARE OF dim_dtype ; dim_record_variable : RECORD dim_def_part END_RECORD | RECORD_LIKE identifier DOT MULTIPLY ; dim_def_part : dim_def_part2 | dim_def_part COMMA dim_def_part2 ; dim_def_part2 : dim_var_def_list dim_dtype ; dim_var_def_list : dim_var_def_name | dim_var_def_list COMMA dim_var_def_name ; dim_var_def_name : identifier ; opt_at : /* empty */ | AT display_coords | TO fld_list ; display_cmd : DISPLAY_BY_NAME reset_cnt ibind_var_list display_attr | DISPLAY reset_cnt fgl_expr_list opt_at display_attr | DISPLAY_FORM form_name display_attr | DISPLAY_ARRAY use_arr_var TO identifier DOT MULTIPLY opt_attributes disp_rest ; display_attr : opt_attributes ; disp_rest : /* empty */ | disp_field_commands END_DISPLAY ; disp_field_commands : disp_field_command | disp_field_commands disp_field_command ; disp_field_command : AFTROW commands | BEFROW commands | on_key_command commands ; error_cmd : ERROR reset_cnt fgl_expr_concat opt_attributes | ERROR reset_cnt fgl_expr_concat opt_attributes WAIT_FOR_KEY ; ext_cmd : EXIT_WHILE | EXIT_INPUT | EXIT_FOREACH | EXIT_FOR | EXIT_CONSTRUCT | EXIT_DISPLAY | EXIT_MENU | EXIT_CASE | EXIT_PROMPT ; continue_cmd : CONTINUE_WHILE | CONTINUE_INPUT | CONTINUE_FOREACH | CONTINUE_FOR | CONTINUE_CONSTRUCT | CONTINUE_DISPLAY | CONTINUE_MENU //| CONTINUE_CASE //| CONTINUE_PROMPT ; exit_prog_cmd : EXIT_PROGRAM | EXIT_PROGRAM fgl_expr ; fgl_expr_c : initial_expr | boolean_expr | report_only_expr | function_call_expr | fgl_expr_c fgl_next | builtin_expr | pdf_expr | literal_expr | MINUS fgl_expr_c | PLUS fgl_expr_c ; fgl_next : and_or_expr | comparison_expr | in_expr | SPACES | interval_expr | null_expr | string_match_expr | clip_expr | using_expr | math_expr ; op_fgl_expr_ret_list : /* empty */ | fgl_expr_ret_list ; fgl_expr_ret : fgl_expr | KW_NULL ; fgl_expr_ret_list : fgl_expr_ret | fgl_expr_ret_list COMMA fgl_expr_ret ; fgl_expr_list : fgl_expr | fgl_expr_list COMMA fgl_expr ; opt_expr_list : /* empty */ | opt_expr_actlist ; opt_expr_actlist : fgl_expr | opt_expr_actlist COMMA fgl_expr ; fgl_expr_concat : fgl_expr | fgl_expr_concat COMMA fgl_expr ; fgl_expr : fgl_expr_c ; op_int_sign : /* empty */ | int_sign ; int_sign : PLUS | MINUS ; char_subscript : OPEN_SQUARE arr_expr CLOSE_SQUARE | OPEN_SQUARE arr_expr COMMA arr_expr CLOSE_SQUARE ; boolean_expr : NOT fgl_expr_c | KW_TRUE | KW_FALSE | OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | PLUS OPEN_BRACKET fgl_expr_c CLOSE_BRACKET ; initial_expr : int_sign real_number | int_sign INT_VALUE ; literal_expr : ASCII INT_VALUE | ASCII variable | CHAR_VALUE | real_number | INT_VALUE | variable THRU variable | variable ; report_only_expr : COLUMN fgl_expr_c | COLUMNS fgl_expr_c | rep_agg | GROUP rep_agg ; and_or_expr : AND fgl_expr_c | OR fgl_expr_c ; in_expr : IN OPEN_BRACKET reset_cnt fgl_expr_list CLOSE_BRACKET | NOT_IN OPEN_BRACKET reset_cnt fgl_expr_list CLOSE_BRACKET ; null_expr : IS_NULL | IS_NOT_NULL ; string_match_expr : MATCHES fgl_expr_c | NOT_MATCHES fgl_expr_c | LIKE fgl_expr_c | NOT_LIKE fgl_expr_c ; clip_expr : CLIPPED ; using_expr : USING fgl_expr_c ; math_expr : PLUS fgl_expr_c | MINUS fgl_expr_c | MULTIPLY fgl_expr_c | DIVIDE fgl_expr_c | MOD fgl_expr_c | POWER fgl_expr_c ; comparison_expr : EQUAL fgl_expr_c | EQUAL_EQUAL fgl_expr_c | LESS_THAN fgl_expr_c | GREATER_THAN fgl_expr_c | NOT_EQUAL fgl_expr_c | LESS_THAN_EQ fgl_expr_c | GREATER_THAN_EQ fgl_expr_c ; reset_cnt : /* empty */ ; function_call_expr2 : identifier OPEN_BRACKET opt_func_call_args CLOSE_BRACKET ; function_callb : DATE OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | MONTH OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | DAY OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | YEAR OPEN_BRACKET fgl_expr_c CLOSE_BRACKET ; function_call_expr : function_callb | GET_FLDBUF OPEN_BRACKET fld_list CLOSE_BRACKET | FIELDTOWIDGET OPEN_BRACKET field_name CLOSE_BRACKET | INFIELD OPEN_BRACKET field_name CLOSE_BRACKET | FIELD_TOUCHED OPEN_BRACKET field_name CLOSE_BRACKET | builtin_funcs | function_call_expr2 ; builtin_expr : curr_v_clause | DATE ; builtin_funcs : UPSHIFT OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | DOWNSHIFT OPEN_BRACKET fgl_expr_c CLOSE_BRACKET | ASCII OPEN_BRACKET INT_VALUE CLOSE_BRACKET | ASCII OPEN_BRACKET variable CLOSE_BRACKET ; pdf_expr : fgl_expr_c POINTS | fgl_expr_c MM | fgl_expr_c INCHES ; for_cmd : FOR variable EQUAL fgl_expr TO fgl_expr for_step commands END FOR ; for_step : /* empty */ | STEP fgl_expr ; foreach_cmd : FOREACH fetch_cursor_name opt_into_fetch_part commands END_FOREACH ; formhandler_def : FORMHANDLER identifier define_section op_bef_ev_list op_input_section op_aft_ev_list END_FORMHANDLER ; op_input_section : /* empty */ | input_section ; op_bef_ev_list : /* empty */ | bef_ev_list ; bef_ev_list : bef_ev | bef_ev_list bef_ev ; bef_ev : BEFORE_EVENT commands | BEFORE_OPEN_FORM commands ; op_aft_ev_list : /* empty */ | aft_ev_list ; aft_ev_list : aft_ev | aft_ev_list aft_ev ; aft_ev : AFTER_EVENT commands | BEFORE_CLOSE_FORM commands ; input_section : input_sub_section field_ops END_INPUT ; input_sub_section : INPUT | INPUT in_variable_list FROM in_id_list | INPUT BY_NAME in_bn_variable_list ; in_variable_list : variable | in_variable_list COMMA variable ; in_id_list : identifier | in_id_list COMMA identifier ; in_bn_variable_list : variable | in_bn_variable_list COMMA variable ; field_ops : field_op | field_ops field_op ; field_op : BEFORE_ANY commands | AFTER_ANY commands | BEFORE in_id_list commands | AFTER in_id_list commands | ON in_id_list commands ; free_cmd : FREE cursor_name ; line_no : LAST MINUS INT_VALUE | LAST | FIRST PLUS INT_VALUE | FIRST | INT_VALUE ; file_name : CHAR_VALUE | cvariable ; a_number : fgl_expr ; coords : a_number COMMA a_number ; display_coords : coords ; field_name : identifier | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE | identifier DOT MULTIPLY | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE DOT MULTIPLY | identifier DOT identifier | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE DOT identifier ; cursor_name : ident_or_var ; foreach_cursor_name : ident_or_var ; fetch_cursor_name : ident_or_var ; win_name : ident_or_var ; open_win_name : ident_or_var ; form_name : ident_or_var ; open_form_name : ident_or_var ; opt_help_no : /* empty */ | HELP INT_VALUE ; identifier : setident NAMED unsetident | reserved_word ; ident_or_var : setident ident_p2 unsetident ; ident_p2 : NAMED | VARIABLE OPEN_BRACKET var_or_string CLOSE_BRACKET ; var_or_string : var | CHAR_VALUE ; setident : ; unsetident : ; field_name2 : identifier | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE | identifier DOT MULTIPLY | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE DOT MULTIPLY | identifier DOT identifier | identifier OPEN_SQUARE arr_expr CLOSE_SQUARE DOT identifier ; cvariable : variable ; real_number : NUMBER_VALUE | DOT INT_VALUE ; reserved_word : PASSWORD | CHECK | CLEAR | CLIPPED | CLOSE | CONSTANT | CONSTRUCT | COUNT | OPTION | CYAN | HEADER | DATABASE | DBA | DBYNAME | DEC | DECIMAL | AUDIT | KWLINE | MODE | DEFAULT | DEFAULTS | DEFER | DELIMITER | DESC | DESCENDING | DIM | DISABLE | DOWN | DOWNSHIFT | DROP | FOREIGN | EXISTS | UPDATE | YEAR | MONTH | DAY | MENU | SPACES | RESOURCE | COMMENT | DATE | TEXT | DELETE | ESCAPE ; goto_cmd : GOTO label_goto ; check_menu_cmd : CHECK_MENUITEM menu_item_list ; menu_item_list : menu_item | menu_item_list COMMA menu_item ; menu_item : identifier ; uncheck_menu_cmd : UNCHECK_MENUITEM menu_item_list ; disable_cmd : DISABLE_MENUITEMS menu_item_list | DISABLE fld_list | DISABLE_FORM form_name KWFIELD fld_list ; enable_cmd : ENABLE_MENUITEMS menu_item_list | ENABLE fld_list | ENABLE_FORM form_name KWFIELD fld_list ; msg_box_cmd : MESSAGEBOX fgl_expr_list op_caption op_icon op_buttons op_disable_msg op_returning_msg ; op_disable_msg : /* empty */ | DISABLE_PROGRAM | DISABLE_ALL ; op_returning_msg : /* empty */ | RETURNING variable ; op_caption : /* empty */ | CAPTION fgl_expr_list ; op_icon : /* empty */ | ICON fgl_expr ; op_buttons : /* empty */ | BUTTONS but_list op_def_but ; op_def_but : DEFAULT but_val ; but_list : BUTTONS_OK | BUTTONS_OK_CANCEL | BUTTONS_RETRY_CANCEL | BUTTONS_ABORT_RETRY_IGNORE | BUTTONS_YES_NO | BUTTONS_YES_NO_CANCEL ; but_val : BUTTON_OK | BUTTON_CANCEL | BUTTON_ABORT | BUTTON_RETRY | BUTTON_IGNORE | BUTTON_YES | BUTTON_NO ; if_cmd : IF fgl_expr THEN commands op_else END_IF ; op_else : /* empty */ | ELSE commands ; import_m : IMPORT_FUNCTION identifier OPEN_BRACKET INT_VALUE CLOSE_BRACKET ; init_cmd : INITIALIZE init_bind_var_list TO KW_NULL | INITIALIZE init_bind_var_list LIKE init_tab_list ; init_tab_list : init_tab | init_tab_list COMMA init_tab ; init_tab : tab_name DOT column_name | tab_name DOT MULTIPLY ; end_input : /* empty */ | field_commands END_INPUT ; opt_defs : /* empty */ | WITHOUT_DEFAULTS ; field_commands : field_command | field_commands field_command ; field_command : BEFFIELD bef_field_list commands | AFTFIELD aft_field_list commands | AFTROW commands | BEFROW commands | on_key_command commands | AFTINP commands | BEFINP commands | BEFORE b_ins_or_delete_row commands | AFTER a_ins_or_delete_row commands ; a_ins_or_delete_row : a_ins_or_delete | a_ins_or_delete_row COMMA a_ins_or_delete ; a_ins_or_delete : INSERT | DELETE ; b_ins_or_delete_row : b_ins_or_delete | b_ins_or_delete_row COMMA b_ins_or_delete ; b_ins_or_delete : INSERT | DELETE ; bef_field_list : field_name | bef_field_list COMMA field_name ; aft_field_list : field_name | aft_field_list COMMA field_name ; next_field_cmd : NEXTFIELD next_field ; next_field : NEXT | PREVIOUS | field_name ; input_cmd : INPUT inp_rest end_input ; inp_rest : BY_NAME ibind_var_list opt_defs opt_help_no opt_attributes inp_print | ibind_var_list opt_defs FROM fld_list opt_help_no opt_attributes inp_print | ARRAY use_arr_var opt_defs FROM identifier DOT MULTIPLY opt_help_no opt_attributes ; inp_print : /* empty */ ; scroll_cmd : SCROLL fld_list up_or_down ; up_or_down : UP | DOWN | UP_BY INT_VALUE | DOWN_BY INT_VALUE ; on_key_command : ON_KEY key_do | ON_ANY_KEY ; key_val : KEY key_do ; accept_key : ACCEPTKEY key_value ; single_key_val : KEY key_do ; key_do : key_value | OPEN_BRACKET key_value_list CLOSE_BRACKET ; key_value_list : key_value | key_value_list COMMA key_value ; key_value : key_value_1 ; key_value_1 : FKEY | CTRL_KEY | INTERRUPT | ACCEPT | SINGLE_KEY | ESCAPE | UP | DOWN | RETURN | TAB | LEFT | RIGHT | CHAR_VALUE ; label_cmd : LABEL identifier | LABEL identifier COLON ; let_cmd : LET obind_var_let_list EQUAL reset_cnt op_expr_null ; op_expr_null : KW_NULL | fgl_expr_concat ; linked_cmd : SELECT_USING variable ; linked_del_cmd : DELETE_USING variable ; linked_upd_cmd : UPDATE_USING variable ; locate_cmd : LOCATE variable IN_MEMORY | LOCATE variable IN_FILE file_name ; module : op_code op_template db_section op_code globals_section op_code define_section op_code func_main_def ; func_main_def : /* empty */ | func_or_main2 ; func_or_main2 : func_or_main | func_or_main2 func_or_main ; at_term_cmd : AT_TERMINATION_CALL identifier ; func_or_main : func_def | main_def | mem_func_def | report_def | pdf_report_def | menu_def | formhandler_def | code_cmd | import_m | comment_cmd ; op_code : /* empty */ | code_cmd ; ldeffunction : FUNCTION | LOCAL FUNCTION ; func_def : ldeffunction identifier OPEN_BRACKET op_param_var_list CLOSE_BRACKET define_section op_code commands end_func_command ; end_func_command : END_FUNCTION ; arg_list : /* empty */ | identifier | arg_list COMMA identifier ; main_def : MAIN define_section commands END_MAIN ; return_cmd : RETURN reset_cnt op_fgl_expr_ret_list ; op_fgl_expr_list : /* empty */ | fgl_expr_list ; db_section : /*empty*/ | set_database | db_section set_database ; set_database : DATABASE dbase_name ; globals_section : /* empty */ | actual_globals_section ; actual_globals_section : globals_entry | actual_globals_section globals_entry ; globals_entry : GLOBALS glob_section ; glob_section : define_section END_GLOBALS | file_name ; mem_func_def : MEMBER_FUNCTION identifier MEMBER_OF identifier OPEN_BRACKET op_param_var_list CLOSE_BRACKET define_section op_code commands end_func_command ; menu_cmd : MENU menu_title menu_commands end_menu_command ; end_menu_command : END_MENU ; menu_block_command : BEFORE_MENU commands | COMMAND opt_key menu_opt_name menu_optional_desc opt_help_no commands | COMMAND opt_key commands ; menu_commands : menu_block_command | menu_commands menu_block_command ; opt_key : /* empty */ | key_val ; menu_opt_name : CHAR_VALUE | variable ; menu_optional_desc : /* empty */ | variable | CHAR_VALUE ; next_option_cmd : NEXT_OPTION opt_name ; show_option_cmd : SHOW_OPTION opt_name_list ; hide_option_cmd : HIDE_OPTION opt_name_list ; opt_name : ALL | CHAR_VALUE | variable ; opt_name_list : opt_name | opt_name_list COMMA opt_name ; menu_title : variable | CHAR_VALUE ; menu_def : MENUHANDLER identifier define_section menu_handler_elements END_MENUHANDLER ; menu_handler_elements : menu_handler_element | menu_handler_elements menu_handler_element ; menu_handler_element : BEFORE_SHOW_MENU commands | ON identifier commands ; message_cmd : msg_start fgl_expr_concat opt_attributes op_msg_wait msg_end | msg_start fgl_expr_concat opt_attributes CAPTION fgl_expr_concat op_msg_wait msg_end ; msg_start : KWMESSAGE ; msg_end : /* empty */ ; op_msg_wait : /* empty */ | WAIT_FOR_KEY ; variable : var_int ; var_int : var | '@' var ; var : var setident DOT dot_part_var | var setident DOT identifier OPEN_SQUARE num_list CLOSE_SQUARE | array_r_variable | identifier | assoc_var_read ; assoc_var_read : identifier OPEN_SHEV assoc_sub CLOSE_SHEV ; assoc_var_write : identifier OPEN_SHEV assoc_sub CLOSE_SHEV ; assoc_sub : variable | CHAR_VALUE ; dot_part_var : MULTIPLY | identifier ; array_r_variable : identifier arr_subscripts ; var_list : var | var_list COMMA var ; arr_subscripts : OPEN_SQUARE num_list CLOSE_SQUARE | OPEN_SQUARE num_list CLOSE_SQUARE OPEN_SQUARE num_list CLOSE_SQUARE ; num_list : num_list_element | num_list COMMA num_list_element ; num_list_element : arr_expr ; arr_num_list : arr_num_list_element | arr_num_list COMMA arr_num_list_element ; arr_num_list_element : arr_expr ; let_variable : let_var ; let_var : let_array_r_variable | let_var setident DOT let_var_dot | let_var setident DOT identifier OPEN_SQUARE num_list CLOSE_SQUARE | identifier | assoc_var_write ; let_var_dot : MULTIPLY | identifier ; let_array_r_variable : identifier OPEN_SQUARE num_list CLOSE_SQUARE ; op_param_var_list : /* empty */ | fparam_var_list ; fparam_var_list : func_def_var | fparam_var_list COMMA func_def_var ; param_var_list : ibind_var | param_var_list COMMA ibind_var ; ibind_var_list : ibind_var | ibind_var_list COMMA ibind_var ; func_def_var : identifier | identifier DOT identifier ; ibind_var : variable | variable THRU variable | CHAR_VALUE | real_number | INT_VALUE ; obind_var_list : obind_var | obind_var_list COMMA obind_var ; obind_var : variable ; obind_var_let_list : obind_let_var | obind_var_let_list COMMA obind_let_var ; obind_let_var : let_variable ; use_arr_var : variable ; obind_var_list_ord : obind_var_ord | obind_var_list_ord COMMA obind_var_ord ; obind_var_ord : variable optional_asc_desc ; optional_asc_desc : /* empty */ | ASC | DESC ; array_r_varid : identifier OPEN_SQUARE num_list CLOSE_SQUARE ; init_bind_var_list : init_bind_var | init_bind_var_list COMMA init_bind_var ; init_bind_var : variable | variable THRU variable ; open_window_cmd : OPEN_WINDOW open_win_name AT coords WITH window_type win_attributes ; formhandler_name : identifier ; open_form_cmd : OPEN_FORM open_form_name open_form_rest ; open_form_rest : open_form_gui | FROM fgl_expr ; open_form_gui : op_at_gui op_like_gui op_disable USING formhandler_name ; op_at_gui : /* empty */ | AT op_absolute OPEN_BRACKET fgl_expr COMMA fgl_expr CLOSE_BRACKET ; op_like_gui : /* empty */ | LIKE ident_or_var ; op_absolute : /* empty */ | ABSOLUTE ; open_session_cmd : OPEN_SESSION conn_id TO_DATABASE var_ident user_details ; open_cursor_cmd : OPEN cursor_name | OPEN cursor_name USING reset_cnt fgl_expr_list ; user_details : /* empty */ | AS USER char_or_var PASSWORD char_or_var | AS USER char_or_var COMMA PASSWORD char_or_var | AS char_or_var COMMA char_or_var ; op_disable : /* empty */ | DISABLE_PROGRAM | DISABLE_ALL ; connect_cmd : CONNECT_TO var_ident op_connect_as con_user_details ; op_connect_as : /* empty */ | AS var_ident ; con_user_details : /* empty */ | AS USER char_or_var USING char_or_var | USER char_or_var USING char_or_var ; options_cmd : OPTIONS opt_options ; opt_options : opt_allopts | opt_options COMMA opt_allopts ; opt_allopts : COMMENT_LINE line_no | ERROR_LINE line_no | FORM_LINE line_no | MENU_LINE line_no | MSG_LINE line_no | PROMPT_LINE line_no | accept_key | DELETE single_key_val | INSERT single_key_val | NEXT single_key_val | PREVIOUS single_key_val | HELP single_key_val | HELP_FILE file_name | DISPLAY attributes_def | INPUT attributes_def | INPUT_WRAP | INPUT_NO_WRAP | FOCONSTR | FOUNCONSTR | SQL_INTERRUPT_ON | SQL_INTERRUPT_OFF ; prepare_cmd : opt_use PREPARE stmt_id FROM var_or_char ; var_or_char : variable | CHAR_VALUE ; execute_cmd : EXECUTE stmt_id | EXECUTE stmt_id USING ibind_var_list ; stmt_id : ident_or_var ; prompt_cmd : PROMPT prompt_title opt_attributes FOR opt_char variable opt_help_no opt_attributes prompt_key_sec ; opt_char : /* empty */ | CHAR ; prompt_key_sec : /* empty */ | prompt_key_clause END_PROMPT ; prompt_key_clause : on_key_command_prompt | prompt_key_clause on_key_command_prompt ; on_key_command_prompt : on_key_command commands ; prompt_title : fgl_expr_concat ; put_cmd : PUT cursor_name put_from ; put_from : /* empty */ | FROM put_val_list ; put_val_list : put_val | put_val_list COMMA put_val ; put_val : value_expression | KW_NULL ; start_cmd : START_REPORT rep_name TO_PRINTER | START_REPORT rep_name TO rout | START_REPORT rep_name TO_PIPE rout | START_REPORT rep_name ; database_name : var_ident ; rout : CHAR_VALUE | cvariable ; rep_name : identifier ; op_values : /* empty */ | VALUES ; output_cmd : OUTPUT_TO_REPORT rep_name op_values OPEN_BRACKET reset_cnt op_fgl_expr_list CLOSE_BRACKET ; finish_cmd : FINISH_REPORT rep_name ; report_section : op_output_section op_rep_order_by ; format_section : FORMAT EVERY ROW | FORMAT format_actions ; format_actions : format_action | format_actions format_action ; format_action : FIRST_PAGE_HEADER commands | PAGE_TRAILER commands | PAGE_HEADER commands | ON_EVERY_ROW commands | ON_LAST_ROW commands | BEFGROUP variable commands | AFTGROUP variable commands ; report_cmd : print_command | print_img_command | print_file_command | need_command | pause_command | skip_command ; need_command : NEED fgl_expr KWLINE ; skip_command : SKIP fgl_expr KWLINE | SKIP_TO_TOP | SKIP_BY nval | SKIP_TO nval ; opt_rep_expr_list : /* empty */ | rep_expr_list ; print_command : PRINT opt_rep_expr_list opt_semi ; print_file_command : PRINT_FILE char_or_var opt_semi ; print_img_command : PRINT_IMAGE blob_var img_types opt_scaling opt_semi ; opt_scaling : /* empty */ | SCALED_BY fgl_expr_c | SCALED_BY fgl_expr_c COMMA fgl_expr_c ; img_types : AS_TIFF | AS_GIF | AS_PNG | AS_JPEG ; blob_var : variable ; opt_semi : /* empty */ | SEMICOLON ; rep_expr_list : rep_expr | rep_expr_list COMMA rep_expr ; rep_expr : fgl_expr op_wordwrap ; opt_group : /* empty */ | GROUP ; rep_agg : SUM OPEN_BRACKET fgl_expr_c CLOSE_BRACKET rep_where | COUNT OPEN_BRACKET MULTIPLY CLOSE_BRACKET rep_where | PERCENT OPEN_BRACKET MULTIPLY CLOSE_BRACKET rep_where | AVERAGE OPEN_BRACKET fgl_expr_c CLOSE_BRACKET rep_where | AVG OPEN_BRACKET fgl_expr_c CLOSE_BRACKET rep_where | XMIN OPEN_BRACKET fgl_expr_c CLOSE_BRACKET rep_where | XMAX OPEN_BRACKET fgl_expr_c CLOSE_BRACKET rep_where ; op_output_section : /* empty */ | OUTPUT output_commands ; output_commands : output_command | output_commands output_command ; output_command : LEFT_MARGIN INT_VALUE | RIGHT_MARGIN INT_VALUE | TOP_MARGIN INT_VALUE | BOTTOM_MARGIN INT_VALUE | PAGE_LENGTH INT_VALUE | REPORT_TO CHAR_VALUE | REPORT_TO_PIPE CHAR_VALUE | TOP_OF_PAGE CHAR_VALUE ; pdf_output_commands : pdf_output_command | pdf_output_commands pdf_output_command ; nval : nval_number POINTS | nval_number INCHES | nval_number MM | nval_number ; nval_number : real_number | INT_VALUE ; pdf_op_output_section : /* empty */ | OUTPUT pdf_output_commands ; pdf_output_command : LEFT_MARGIN nval | RIGHT_MARGIN nval | TOP_MARGIN nval | BOTTOM_MARGIN nval | PAGE_LENGTH nval | PAGE_WIDTH nval | FONT_NAME CHAR_VALUE | FONT_SIZE INT_VALUE | PAPER_SIZE_IS_A4 | PAPER_SIZE_IS_LETTER | PAPER_SIZE_IS_LEGAL | REPORT_TO CHAR_VALUE | REPORT_TO_PIPE CHAR_VALUE ; op_rep_order_by : /* empty */ | ORDER BY obind_var_list_ord | ORDER_EXTERNAL_BY obind_var_list_ord ; report_def : REPORT identifier OPEN_BRACKET op_param_var_list CLOSE_BRACKET define_section report_section format_section END_REPORT ; rep_where : /* empty */ | WHERE fgl_expr_c ; commands_else : commands | commands ELSE commands ; pause_command : PAUSE pause_msg ; pause_msg : /* empty */ | var_or_char ; pdf_report_def : PDF_REPORT identifier OPEN_BRACKET op_param_var_list CLOSE_BRACKET define_section pdf_report_section format_section END_REPORT ; pdf_report_section : pdf_op_output_section op_rep_order_by ; pdf_functions : PDF_FUNCTION OPEN_BRACKET CHAR_VALUE COMMA opt_func_call_args CLOSE_BRACKET opt_return ; op_wordwrap : /* empty */ | WORDWRAP | WORDWRAP RIGHT_MARGIN INT_VALUE | WORDWRAP RIGHT_MARGIN variable ; run_cmd : RUN fgl_expr | RUN fgl_expr RETURNING variable | RUN fgl_expr WITHOUT_WAITING ; drops_cmd : drops_c ; drops_c : DROP_TABLE | DROP_VIEW | DROP_INDEX ; view_name : identifier ; create_cmd : create_c_1 ; create_c_1 : CREATE_IDX idx_column_list CLOSE_BRACKET | CREATE_TABLE table_name OPEN_BRACKET table_element_list CLOSE_BRACKET | CREATE_TEMP_TABLE table_name OPEN_BRACKET table_element_list CLOSE_BRACKET op_no_log ; op_no_log : /* empty */ | WITH_NO_LOG ; idx_column_list : idx_column | idx_column_list COMMA idx_column ; idx_column : identifier ASC | identifier DESC | identifier ; idx_name : identifier ; table_element_list : table_element | table_element_list COMMA table_element ; table_element : column_definiton | table_constraint_definition ; upd_stats_cmd : UPDATESTATS_T identifier | UPDATESTATS ; set_cmd : SQLSEON | SQLSEOFF | SQLSLMW op_fgl_expr | SQLSLMNW | SQLSIDR | SQLSIRR | SQLSICS | SQLSICR | SET_SESSION_TO conn_id | SET_SESSION op_conn_id OPTION char_or_var TO char_or_var | SET_CURSOR cursor_name OPTION char_or_var TO char_or_var ; op_conn_id : /* empty */ | conn_id ; op_fgl_expr : /* empty */ | fgl_expr ; sleep_cmd : SLEEP fgl_expr ; update_statement : UPDATE table_name XSET set_clause_list where_upd ; where_upd : /* empty */ | WHERE_CURRENT_OF fetch_cursor_name | WHERE search_condition ; set_clause_list : special_upd_clause | OPEN_BRACKET upd_col_list CLOSE_BRACKET EQUAL OPEN_BRACKET upd_val_list CLOSE_BRACKET | upd_columns ; special_upd_clause : MULTIPLY EQUAL OPEN_BRACKET upd_val_list CLOSE_BRACKET | MULTIPLY EQUAL upd_val_list ; upd_columns : col_1 | upd_columns COMMA col_1 ; upd_column_name : column_name ; col_1 : upd_column_name EQUAL upd_val ; upd_col_list : upd_column_name | upd_col_list COMMA upd_column_name ; upd_val_list : upd_val | upd_val_list COMMA upd_val ; upd_val : value_expression | KW_NULL | subquery ; rollback_statement : ROLLBACK_W ; insert_statement : INSERT_INTO table_name op_insert_column_list ins_2 ; ins_2 : VALUES OPEN_BRACKET insert_value_list CLOSE_BRACKET | query_specification ; op_insert_column_list : /* empty */ | OPEN_BRACKET insert_column_list CLOSE_BRACKET ; columns_list : column_name | insert_column_list COMMA column_name ; insert_column_list : column_name | insert_column_list COMMA column_name ; insert_value_list : insert_value | insert_value_list COMMA insert_value ; insert_value : value_expression | KW_NULL ; fetch_statement : FETCH fetch_part opt_into_fetch_part ; fetch_part : fetch_place fetch_cursor_name | fetch_cursor_name ; opt_into_fetch_part : /* empty */ | INTO ibind_var_list ; fetch_place : FIRST | LAST | NEXT | PREVIOUS | CURRENT | RELATIVE fgl_expr | ABSOLUTE fgl_expr ; fetch_target_list : variable | fetch_target_list COMMA variable ; delete_statement_position : DELETE_FROM table_name WHERE_CURRENT_OF fetch_cursor_name ; delete_statement_search : DELETE_FROM table_name op_where_clause ; query_expression : query_term | query_expression UNION op_all query_term ; query_term : query_specification | OPEN_BRACKET query_expression CLOSE_BRACKET ; op_order_by_clause : /* empty */ | order_by_clause ; order_by_clause : ORDER BY sort_specification_list ; sort_specification_list : sort_specification | sort_specification_list COMMA sort_specification ; sort_specification : sort_spec op_asc_desc ; sort_spec : INT_VALUE | column_name ; op_asc_desc : /* empty */ | ASC | DESC ; begin_statement : BEGIN_WORK ; commit_statement : COMMIT_W ; op_exclusive : /* empty */ | EXCLUSIVE ; set_database_cmd : DATABASE var_ident op_exclusive ; sql_cmd : opt_use sql_commands ; sql_commands : schema | schema_element | commit_statement | misc_sql | begin_statement | set_database_cmd | delete_statement_position | delete_statement_search | fetch_statement | insert_statement | rollback_statement | select_statement_full | update_statement ; privilege_definition : GRANT privileges ON table_name TO grantee_list op_with_grant_option ; op_with_grant_option : /* empty */ | WITH_GRANT_OPTION ; privileges : ALL_PRIVILEGES | action_list ; action_list : action | action_list COMMA action ; action : SELECT | INSERT | DELETE | UPDATE op_grant_column_list ; op_grant_column_list : /* empty */ | OPEN_BRACKET grant_column_list CLOSE_BRACKET ; grant_column_list : column_name | grant_column_list COMMA column_name ; grantee_list : grantee | grantee_list COMMA grantee ; grantee : PUBLIC | authorization_identifier ; view_definition : CREATE_VIEW table_name op_view_column_list AS query_specification op_with_check_option ; op_view_column_list : /* empty */ | OPEN_BRACKET view_column_list CLOSE_BRACKET ; view_column_list : column_name | view_column_list COMMA column_name ; op_with_check_option : /* empty */ | WITH_CHECK_OPTION ; check_constraint_definition : CHECK OPEN_BRACKET search_condition CLOSE_BRACKET ; referential_constraint_definition : FOREIGN_KEY OPEN_BRACKET references_columns CLOSE_BRACKET references_specification ; references_specification : REFERENCES referenced_table_and_columns ; references_columns : references_column_list ; referenced_table_and_columns : table_name | table_name OPEN_BRACKET references_column_list CLOSE_BRACKET ; references_column_list : column_name | references_column_list COMMA column_name ; unique_constraint_definition : UNIQUE OPEN_BRACKET unique_column_list CLOSE_BRACKET | PRIMARY_KEY OPEN_BRACKET unique_column_list CLOSE_BRACKET ; unique_column_list : column_name | unique_column_list COMMA column_name ; table_constraint_definition : unique_constraint_definition | referential_constraint_definition | check_constraint_definition ; default_clause : DEFAULT literal | DEFAULT_NULL ; column_definiton : column_name data_type op_default_clause op_column_constraint_list ; op_default_clause : /* empty */ | default_clause ; op_column_constraint_list : /* empty */ | column_constraint op_column_constraint_list ; column_constraint : NOT_NULL | NOT_NULL_UNIQUE | references_specification | CHECK OPEN_BRACKET search_condition CLOSE_BRACKET ; schema : CREATE_SCHEMA schema_authorization_clause schema_element_list ; schema_authorization_clause : schema_authorization_identifier ; schema_authorization_identifier : authorization_identifier ; schema_element_list : schema_element | schema_element_list schema_element ; schema_element : view_definition | privilege_definition ; result_specification : value_expression ; having_clause : HAVING search_condition ; group_by_clause : GROUP_BY column_specification_list ; column_specification_list : column_specification | column_specification_list COMMA column_specification ; where_clause : WHERE search_condition ; from_clause : FROM table_reference_list ; table_reference_list : table_reference | table_reference_list COMMA table_reference ; table_reference : tname | OUTER tname | OUTER OPEN_BRACKET tname_list CLOSE_BRACKET ; tname : table_name | table_name correlation_name ; tname_list : tname | tname_list COMMA tname table_expression : from_clause op_where_clause op_group_by_clause op_having_clause ; op_where_clause : /* empty */ | where_clause ; op_group_by_clause : /*empty */ | group_by_clause ; op_having_clause : /* empty */ | having_clause ; search_condition : boolean_term | search_condition OR boolean_term ; boolean_term : boolean_factor | boolean_term AND boolean_factor ; boolean_factor : boolean_primary | NOT boolean_primary ; boolean_primary : predicate | OPEN_BRACKET search_condition CLOSE_BRACKET ; exists_predicate : EXISTS subquery | NOT_EXISTS subquery ; quantified_predicate : value_expression comp_op quantifier subquery | subquery comp_op value_expression ; quantifier : /* empty */ | all | some ; all : ALL ; some : SOME | ANY ; op_escape : ESCAPE escape_character ; pattern : value_specification ; escape_character : value_specification ; in_predicate : value_expression IN OPEN_BRACKET in_value_list CLOSE_BRACKET | value_expression IN subquery | value_expression NOT_IN OPEN_BRACKET in_value_list CLOSE_BRACKET | value_expression NOT_IN subquery ; in_value_list : value_specification | in_value_list COMMA value_specification ; op_not : /* empty */ | NOT ; comparison_predicate : value_expression op_not IS_NULL | value_expression op_not IS_NOT_NULL | value_expression comp_op value_expression | value_expression comp_op subquery | value_expression op_not BETWEEN value_expression AND value_expression | value_expression op_not LIKE pattern op_escape ; comp_op : EQUAL | NOT_EQUAL | LESS_THAN | GREATER_THAN | NOT_MATCHES | NOT_LIKE | MATCHES | LIKE | LESS_THAN_EQ | GREATER_THAN_EQ ; predicate : comparison_predicate | in_predicate | quantified_predicate | exists_predicate ; op_all : /* empty */ | ALL | DISTINCT | UNIQUE ; target_specification : parameter_specification ; parameter_specification : var_ident_ibind ; variable_specification : COLON identifier identifier | var_ident_ibind ; data_type : char_string_type | exact_numeric_type | approx_numeric_type ; char_string_type : CHAR | CHAR OPEN_BRACKET length CLOSE_BRACKET ; exact_numeric_type : NUMERIC OPEN_BRACKET precision op_scale CLOSE_BRACKET | SERIAL | DECIMAL OPEN_BRACKET precision op_scale CLOSE_BRACKET | MONEY OPEN_BRACKET precision op_scale CLOSE_BRACKET | DATE | INTEGER | SMALLINT | DATETIME s_curr TO e_curr | DATETIME | INTERVAL s_curr TO e_curr | INTERVAL | INTERVAL s_curr OPEN_BRACKET INT_VALUE CLOSE_BRACKET TO e_curr | TEXT | BYTE | VARCHAR | VARCHAR OPEN_BRACKET INT_VALUE CLOSE_BRACKET | VARCHAR OPEN_BRACKET INT_VALUE COMMA INT_VALUE CLOSE_BRACKET ; op_scale : /* empty */ | COMMA scale ; approx_numeric_type : FLOAT OPEN_BRACKET precision CLOSE_BRACKET | REAL | SMALLFLOAT | FLOAT | DOUBLE PRECISION ; length : INT_VALUE ; precision : INT_VALUE ; scale : INT_VALUE ; table_name : CHAR_VALUE | table_identifier | db_name COLON table_identifier | CHAR_VALUE DOT table_identifier ; db_name : identifier ; authorization_identifier : identifier ; table_identifier : identifier ; col_arr : /* empty */ | OPEN_SQUARE INT_VALUE CLOSE_SQUARE | OPEN_SQUARE INT_VALUE COMMA INT_VALUE CLOSE_SQUARE ; column_name : identifier col_arr | table_name setident DOT identifier col_arr | table_name setident DOT MULTIPLY ; correlation_name : identifier ; literal : CHAR_VALUE | NUMERIC | real_number | INT_VALUE | PLUS real_number | PLUS INT_VALUE | MINUS real_number | MINUS INT_VALUE | curr_clause ; curr_v_clause : CURRENT cur_v_part ; curr_clause : CURRENT cur_part ; cur_part : /* empty */ | s_curr TO e_curr ; cur_v_part : /* empty */ | s_curr_v TO e_curr_v ; s_curr_v : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION ; e_curr_v : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION ; s_curr : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION ; e_curr : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | FRACTION ; dbase_name : identifier | CHAR_VALUE ; flush_cmd : opt_use FLUSH fetch_cursor_name ; declare_cmd : opt_use DECLARE fetch_cursor_name CURSOR FOR cursor_specification_all curs_forupdate | opt_use DECLARE fetch_cursor_name CURSOR WITH_HOLD FOR cursor_specification_sel curs_forupdate | opt_use DECLARE fetch_cursor_name SCROLL_CURSOR_FOR cursor_specification_sel curs_forupdate | opt_use DECLARE fetch_cursor_name SCROLL_CURSOR WITH_HOLD FOR cursor_specification_sel curs_forupdate ; curs_forupdate : /* empty */ | FOR_UPDATE | FOR_UPDATE_OF cur_update_list ; cur_update_list : colident | cur_update_list COMMA colident ; colident : identifier | identifier DOT identifier | CHAR_VALUE DOT identifier DOT identifier ; cursor_specification_all : cursor_specification_sel | insert_statement ; cursor_specification_sel : stmt_id | select_statement ; select_statement_full : select_statement curs_forupdate ; select_statement : SELECT op_ad select_list opt_into_sel table_expression sel_p2 ; select_statement2 : select_statement2_1 | char_or_var ; select_statement2_1 : SELECT setident op_ad select_list opt_into_sel table_expression sel_p2 ; sel_p2 : /* empty */ | UNION op_all select_statement2 | order_by_clause | INTO_TEMP tmp_tabname op_no_log ; tmp_tabname : identifier ; op_into_temp : /* empty */ | INTO_TEMP tmp_tabname op_no_log ; opt_into_sel : /* empty */ | INTO obind_var_list ; select_target_list : target_specification | select_target_list COMMA target_specification ; query_specification : SELECT setident op_ad select_list table_expression ; subquery : OPEN_BRACKET SELECT setident op_ad select_list table_expression CLOSE_BRACKET ; op_ad : /* empty */ | ALL | DISTINCT | UNIQUE ; select_list : value_expression_pls | select_list COMMA value_expression_pls ; value_expression_pls : value_expression | value_expression NAMED ; column_specification : value_expression ; value_expression : value_expression DIVIDE value_expression | value_expression units_qual | value_expression MULTIPLY value_expression | value_expression PLUS value_expression | value_expression MINUS value_expression | var_ident_ibind | literal | KW_TRUE | KW_FALSE | USER | MULTIPLY | COUNT OPEN_BRACKET MULTIPLY CLOSE_BRACKET | AVG OPEN_BRACKET op_all value_expression CLOSE_BRACKET | XMAX OPEN_BRACKET op_all value_expression CLOSE_BRACKET | XMIN OPEN_BRACKET op_all value_expression CLOSE_BRACKET | SUM OPEN_BRACKET op_all value_expression CLOSE_BRACKET | COUNT OPEN_BRACKET op_all value_expression CLOSE_BRACKET | identifier OPEN_BRACKET value_expr_list CLOSE_BRACKET | DATE setident OPEN_BRACKET setident value_expr_list CLOSE_BRACKET | OPEN_BRACKET value_expression CLOSE_BRACKET ; value_expr_list : value_expression | value_expr_list COMMA value_expression ; value_specification : /* empty */ | literal ; unload_cmd : opt_use UNLOAD_TO ufile opt_delim select_statement2 ; load_cmd : opt_use LOAD_FROM ufile opt_delim INSERT_INTO table_name opt_col_list ; opt_delim : /* empty */ | DELIMITER char_or_var ; char_or_var : CHAR_VALUE | variable ; opt_col_list : /* empty */ | OPEN_BRACKET col_list CLOSE_BRACKET ; col_list : simple_column_name | col_list COMMA simple_column_name ; simple_column_name : identifier ; ufile : CHAR_VALUE | variable ; opt_use : /* empty */ | USE_SESSION conn_id FOR ; conn_id : ident_or_var ; associate_select_statement : SELECT op_ad select_list_associate table_expression_associate ; select_list_associate : value_expression_pls | select_list_associate COMMA value_expression_pls ; table_expression_associate : from_clause where_clause_associate op_group_by_clause op_having_clause ; where_clause_associate : WHERE search_condition ; misc_sql : lock_stmt | unlock_stmt | rename_stmt ; rename_stmt : RENTAB rentabname TO rentabname | RENCOL rentabname DOT rencolname TO rencolname ; rentabname : identifier ; rencolname : identifier ; unlock_stmt : UNLOCK_TABLE tab_name ; lock_stmt : LOCK_TABLE tab_name share_or_exclusive ; share_or_exclusive : INSHARE | INEXCLUSIVE ; units_qual : UNITS_YEAR | UNITS_MONTH | UNITS_DAY | UNITS_HOUR | UNITS_MINUTE | UNITS_SECOND ; op_template : /* empty */ | template_m ; template_m : TEMPLATE template_list END_TEMPLATE ; template_list : template_item | template_list template_item ; template_item : identifier EQUAL template_value | identifier OPEN_SQUARE CLOSE_SQUARE EQUAL template_value | DATABASE EQUAL template_single_value ; template_single_value : PROMPT CHAR_VALUE | PROMPT_MANY CHAR_VALUE | PROMPT INT_VALUE COMMA CHAR_VALUE | CHAR_VALUE | INT_VALUE ; template_value : COLUMNS identifier | identifier | template_single_value | template_value PLUS template_value | template_value MINUS template_value | template_value IN template_value | OPEN_BRACKET template_value CLOSE_BRACKET | APPEND template_single_value TO template_value | PREPEND template_single_value TO template_value | USE template_value WITH template_single_value ON template_value ; var_ident : var2 ; var2 : '@' var3 | var3 ; var3 : array_r_varid | identifier | var3 DOT aft_dot | CHAR_VALUE DOT var3 DOT aft_dot ; aft_dot : MULTIPLY | array_r_varid | identifier ; var_ident_ibind : var2 | var2 THRU var2 ; whenever_cmd : WHENEVER_NOT_FOUND when_do | WHENEVER_SQLERROR when_do | WHENEVER_ANY_ERROR when_do | WHENEVER_ERROR_CONTINUE | WHENEVER_ERROR when_do | WHENEVER_SQLWARNING when_do | WHENEVER_WARNING when_do | WHENEVER_SUCCESS when_do | WHENEVER_SQLSUCCESS when_do ; when_do : CONTINUE | GO TO label_goto | GOTO label_goto | STOP | FCALL function_name_when ; label_goto : identifier | COLON identifier ; function_name_when : identifier ; while_cmd : WHILE fgl_expr commands END_WHILE ; op_clr_fields : /* empty */ | KWFIELD fld_list ; op_to_defs : /* empty */ | TO_DEFAULTS ; clear_cmd : CLEARSCR | CLEARWIN win_name | CLEARFORM | CLEARFORM form_name op_clr_fields op_to_defs | CLEAR fld_list op_to_defs ; fld_list : field_name | fld_list COMMA field_name ; current_win_cmd : CWIS | CURRENT_WINDOW_IS win_name ; window_type : fgl_expr ROWS COMMA fgl_expr COLUMNS | KWFORM fgl_expr ; show_cmd : SHOW_WINDOW win_name | SHOW_MENU menu_name USING menu_handler op_mnfile ; op_mnfile : /* empty */ | FROM fgl_expr ; menu_name : identifier ; menu_handler : identifier ; hide_cmd : HIDE_WINDOW win_name ; move_cmd : MOVE_WINDOW win_name TO fgl_expr COMMA fgl_expr | MOVE_WINDOW win_name BY fgl_expr COMMA fgl_expr ; NAMED : NAMED_GEN ; commands : /* empty */ | command1 ; all_commands : commands_all | commands_all SEMICOLON ; command1 : all_commands | command1 all_commands ; commands_all : commands_all1 ; commands_all1 : pause_screen_cmd | start_rpc_cmd | stop_rpc_cmd | call_cmd | case_cmd | close_cmd | code_cmd | comment_cmd | construct_cmd | defer_cmd | display_cmd | error_cmd | ext_cmd | continue_cmd | exit_prog_cmd | for_cmd | foreach_cmd | free_cmd | goto_cmd | check_menu_cmd | uncheck_menu_cmd | disable_cmd | enable_cmd | msg_box_cmd | if_cmd | init_cmd | next_field_cmd | input_cmd | scroll_cmd | label_cmd | let_cmd | linked_cmd | linked_del_cmd | linked_upd_cmd | locate_cmd | at_term_cmd | return_cmd | menu_cmd | next_option_cmd | show_option_cmd | hide_option_cmd | message_cmd | open_window_cmd | open_form_cmd | open_session_cmd | open_cursor_cmd | connect_cmd | options_cmd | prepare_cmd | execute_cmd | prompt_cmd | put_cmd | start_cmd | output_cmd | finish_cmd | report_cmd | run_cmd | drops_cmd | create_cmd | upd_stats_cmd | set_cmd | sleep_cmd | set_database_cmd | sql_cmd | flush_cmd | declare_cmd | unload_cmd | load_cmd | whenever_cmd | while_cmd | clear_cmd | current_win_cmd | show_cmd | hide_cmd | move_cmd ; %%