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 tel:( 343 )290-54-40 fax:( 343 )205-14-08


Copyright (C)Company RTS 2000-2016