|
Welcome! Run-Time Systems |
Язык Start-RTS+ & Компилятор Start-RTS+ РОСПАТЕНТ N 2004610440 на главную |
Start-RTS+ Грамматика |
%{ //============================================================================= // Start-RTS+ grammar (c) Copyright & Author Yuriy Vagin 1995... //============================================================================= %}
%token LF %token IDENTIFIER %token CONSTANT %token STR_LITERAL %token CHAR %token CHAU %token OINT %token DINT %token QINT %token OFLT %token DFLT %token CURR %token DATE %token TIME %token BLOB %token OTBL %token NE_U %token MD_O %token AD_D %token CL_B %token CR_B %token MU_D %token PL_D %token CMA_O %token MI_D %token DOT_O %token DV_O %token CLN_O %token SEM_O %token LT_O %token EQ_A %token GT_O %token QST_O %token SL_B %token SR_B %token ER_O %token FL_B %token OR_O %token FR_B %token XR_U %token MU_A %token DV_A %token MD_A %token PL_A %token MI_A %token LS_A %token RS_A %token AD_A %token ER_A %token OR_A %token PP_O %token MM_O %token LS_O %token RS_O %token OO_O %token AA_O %token EQ_O %token NE_O %token LE_O %token GE_O %token AND %token OR %token INCLUDE %token CLASS %token DATA %token CODE %token WHILE %token DO %token FOR %token IF %token ELSE %token SWITCH %token CASE %token DEFAULT %token CONTINUE %token BREAK %token RETURN %token GOTO %token FI %token EXAME %token APPEND %token COMPUTE %token CHANGE %token QUOTIENT %token PRODUCT %token UNIONT %token SUBTRACT %token PROJECT %token JOIN %token INTERSECT %token CREATE %token CONNECT %token DISCONNECT %token CURSOR %token INSERT %token UPDATE %token SELECT %token DELETE %token BUFFER %token BASE %token TABLE %token COLUMN %token FORM %token FILE %token ROWS %token RULE %token USER %token PRIVILEGES %token PASSWORD %token BEFORE %token USING %token FROM %token INTO %token WITH %token NAME %token BY %token OF %token TO %token ON %token ALL %token EXCLUDING %token INCLUDING %token WHERE %token SORTING %token CONTAIN %token NOT %token ASC %token DESC %token AVG %token COUNT %token MAXIMUM %token MINIMUM %token SUM %token STDEV %token VARIENCE
%start file
%% file : INCLUDE s_lit set_include_file file | class_definition file | function_definition file | rel_statement SEM_O ; // -------------------------------------------------------------------- include set_include_file : // empty ; // ----------------------------------------------------------- class_definition class_definition : CLASS ident def_iclass FL_B all_class all_data all_code FR_B ; def_iclass : // empty ; all_class : // empty | CONTAIN def_class FL_B list_class FR_B ; def_class : // empty ; list_class : one_class | list_class one_class ; one_class : CLASS ident SEM_O | CLASS ident EQ_A CLASS ident SEM_O ; all_data : DATA def_data FL_B list_data FR_B ; def_data : // empty ; list_data : declaration | list_data declaration ; all_code : // empty | CODE def_code compound_statement ; def_code : // empty ; // -------------------------------------------------------- function_definition function_definition : type ident CL_B list_form_params CR_B compound_statement ; list_form_params : // empty | list_decl_params ; list_decl_params : decl_param | list_decl_params CMA_O decl_param ; decl_param : type ident ; compound_statement : FL_B list_decl_stmt FR_B ; list_decl_stmt : decl_stmt | list_decl_stmt decl_stmt ; decl_stmt : declaration | statement ; // ---------------------------------------------------------------- declaration declaration : type list_init_decl SEM_O ; list_init_decl : init_decl | list_init_decl CMA_O init_decl ; init_decl : decl | decl EQ_A initializer ; decl : ident | ident SL_B constant_expr SR_B ; initializer : assignment_expr | FL_B initializer_list FR_B ; initializer_list : initializer | initializer_list CMA_O initializer ; // ---------------------------------------------------------------------- types type : CHAR | CHAU | OINT | DINT | QINT | OFLT | DFLT | CURR | DATE | TIME | BLOB | OTBL ; // ----------------------------------------------------------------- statements statement : labeled_statement | compound_statement | selection_statement | iteration_statement | jump_statement | object_statement | expression_statement | rel_statement SEM_O ; labeled_statement : ident CLN_O set_lab decl_stmt | CASE constant_expr CLN_O statement | DEFAULT CLN_O statement ; set_lab : // empty ; selection_statement : IF CL_B expr CR_B if_stmt else_stmt | SWITCH set_switch CL_B expr CR_B statement ; if_stmt : statement ; else_stmt : // empty | ELSE statement ; set_switch : // empty ; iteration_statement : WHILE set_while CL_B expr CR_B statement | DO set_do statement WHILE CL_B expr CR_B SEM_O | FOR CL_B n_expr SEM_O set_for n_expr SEM_O n_expr CR_B statement ; set_while : // empty ; set_do : // empty ; set_for : // empty ; n_expr : // empty | expr ; jump_statement : CONTINUE SEM_O | BREAK SEM_O | GOTO ident SEM_O | RETURN n_expr SEM_O ; object_statement : EXAME SEM_O | CONNECT ident SEM_O | DELETE ident SEM_O | CREATE ident DOT_O ident c_data SEM_O ; c_data : c_a FL_B list_data FR_B c_b sub_class FR_B ; sub_class : one_class c_data | sub_class one_class c_data ; c_a : // empty ; c_b : // empty ; expression_statement : SEM_O | expr SEM_O ; // ---------------------------------------------------------------- expressions expr : assignment_expr | expr CMA_O assignment_expr ; assignment_expr : conditional_expr | unary_expr dop_expr assignment_operator assignment_expr ; dop_expr : // empty | compound_statement ; unary_expr : postfix_expr | PP_O unary_expr | MM_O unary_expr | unary_operator cast_expr ; unary_operator : AD_D | MU_D | PL_D | MI_D | XR_U | NE_U ; postfix_expr : primary_expr | postfix_expr SL_B expr SR_B | postfix_expr CL_B assign_expr_list CR_B | postfix_expr PP_O | postfix_expr MM_O | FI ; assign_expr_list : // empty | assignment_expr_list ; assignment_expr_list : assignment_expr | assignment_expr_list CMA_O assignment_expr ; primary_expr : ident d1_ident | consta | s_lit | CL_B expr CR_B | error LF ; d1_ident : // empty | DOT_O ident d2_ident ; d2_ident : // empty | DOT_O ident ; ident : IDENTIFIER ; consta : CONSTANT ; s_lit : STR_LITERAL ; conditional_expr : logical_or_expr | logical_or_expr QST_O logical_or_expr CLN_O conditional_expr ; logical_or_expr : logical_and_expr | logical_or_expr OO_O logical_and_expr ; logical_and_expr : inclusive_or_expr | logical_and_expr AA_O inclusive_or_expr ; inclusive_or_expr : exclusive_or_expr | inclusive_or_expr OR_O exclusive_or_expr ; exclusive_or_expr : and_expr | exclusive_or_expr ER_O and_expr ; and_expr : equality_expr | and_expr AD_D equality_expr ; equality_expr : relational_expr | equality_expr EQ_O relational_expr | equality_expr NE_O relational_expr ; relational_expr : shift_expr | relational_expr LT_O shift_expr | relational_expr GT_O shift_expr | relational_expr LE_O shift_expr | relational_expr GE_O shift_expr ; shift_expr : additive_expr | shift_expr LS_O additive_expr | shift_expr RS_O additive_expr ; additive_expr : multiplicative_expr | additive_expr PL_D multiplicative_expr | additive_expr MI_D multiplicative_expr ; multiplicative_expr : cast_expr | multiplicative_expr MU_D cast_expr | multiplicative_expr DV_O cast_expr | multiplicative_expr MD_O cast_expr ; cast_expr : unary_expr | CL_B type CR_B cast_expr ; assignment_operator : EQ_A | MU_A | DV_A | MD_A | PL_A | MI_A | LS_A | RS_A | AD_A | ER_A | OR_A ; constant_expr : conditional_expr ; // -------------------------------------------------------------- rel_statement rel_statement : CREATE list_meb_all | CONNECT fbt USING PASSWORD EQ_A s_lit | DISCONNECT pbt | CHANGE tbase ON meb_b | DELETE tbase | APPEND TO tbase meb_t bemeb_t | CHANGE INTO tbase ttabl ON meb_t | DELETE FROM tbase ttabl | PROJECT FROM tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | SUBTRACT FROM tbase ttabl tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | JOIN tbase ttabl WITH tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | UNIONT tbase ttabl WITH tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | INTERSECT tbase ttabl WITH tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | PRODUCT tbase ttabl AND tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | QUOTIENT tbase ttabl AND tbase ttabl INTO tbase ttabl inex whe_seq sor_seq | APPEND TO tbase ttabl k_list | CHANGE INTO tbase ttabl k_list | DELETE FROM tbase ttabl COLUMN c_list | COMPUTE INTO tbase ttabl compute_list whe_seq | INSERT ROWS INTO tbase ttabl inex inpout upd_seq whe_seq | SELECT ROWS FROM tbase ttabl inex inpout whe_seq sor_seq | DELETE ROWS FROM tbase ttabl inex inpout whe_seq sor_seq | UPDATE ROWS INTO tbase ttabl inex upd_seq whe_seq sor_seq | APPEND TO tbase e_list | CHANGE INTO tbase e_list | DELETE FROM tbase RULE FOR COLUMN c_list | APPEND TO tbase ttabl inex user name whe_seq | CHANGE INTO tbase user ON user | DELETE FROM tbase ttabl user | CURSOR ident action | BUFFER ident actionb ; actionb : ON | OF ; action : ON | OF | v_list | upd_seqc | MM_O | MI_D | PL_D | PP_O ; user : USER ident | OF USER ident ; name : BY NAME ident WITH PRIVILEGES s_lit ; e_list : meb_e | e_list meb_e ; meb_e : RULE FOR tcol meb_ee ; meb_ee : // empty | EQ_A s_lit ; list_meb_all : meb_all | list_meb_all meb_all ; meb_all : meb_b | meb_t | meb_k ; bemeb_t : // empty | BEFORE ttabl ; k_list : meb_kk | k_list meb_kk ; meb_kk : meb_k | meb_k BEFORE tcol | tcol ON meb_k ; meb_b : tbase EQ_A s_lit ; meb_t : ttabl EQ_A s_lit ; meb_k : tcol EQ_A s_lit ; compute_list : k_compute | compute_list k_compute ; k_compute : tcol l_func INTO ident ; fbt : BASE s_lit | TABLE s_lit ; pbt : tbase | ttabl ; tbase : BASE ident ; ttabl : TABLE ident | USING FORM ident ; tcol : COLUMN ident ; inex : // empty | EXCLUDING COLUMN c_list | INCLUDING COLUMN c_list | INCLUDING ALL ; c_list : ident | c_list ident ; upd_seq : // empty | COLUMN u_list ; u_list : u_col | u_list u_col ; u_col : ident EQ_A primary_expr ; upd_seqc : COLUMN u_listc ; u_listc : u_colc | u_listc u_colc ; u_colc : ident EQ_A primary_expr ; v_list : v_var | v_list v_var ; v_var : ident EQ_A ident ; whe_seq : // empty | WHERE COLUMN w_list ; w_list : w_col | w_list expr_cont w_col ; w_col : ident expr_comp primary_expr ; sor_seq : // empty | SORTING COLUMN s_list ; s_list : s_col | s_list s_col ; s_col : ident EQ_A direction ; inpout : // empty | FROM FILE s_lit | INTO FILE s_lit | FROM BUFFER ident | INTO BUFFER ident ; expr_comp : EQ_O | NE_O | LT_O | GT_O | LE_O | GE_O | CONTAIN | NOT CONTAIN ; direction : ASC | DESC ; expr_cont : AND | OR ; l_func : AVG | COUNT | MAXIMUM | MINIMUM | SUM | STDEV | VARIENCE ;
%% // ------------------------------------------------------------------------ end |
e-mail:rts@rtsrts.com |
Copyright (C)RTsRTs 2000-2023 |