前へ  次へ

文法



program	: main_statement_list

main_statement_list
        : statement
        | main_statement_list statement

statement
        : declaration       ";"
        | selection
        | iteration
        | put_function      ";"
        | set_function      ";"
        | mass_expr         ";"
        | "{" statement_list "}"

statement_list
        : statement
        | statement_list statement

declaration
        : TYPE declarator_list

declarator_list
        : declarator
        | declarator_list "," declarator

declarator
        : NO_DEFINE
        | NO_DEFINE "[" one_expr "]"
        | NO_DEFINE "(" one_expr "," one_expr ")"
        | NO_DEFINE "(" one_expr "," one_expr "," one_expr ")"

selection 
        : if.prefix statement 
        | if.prefix statement "else" statement

if.prefix
        : "if" "(" cond_expr ")"

iteration
        : for.prefix  statement
        | while.prefix statement

for.prefix
        : "for" "(" mass_expr ";" cond_expr ";" mass_expr ")"

while.prefix
        : "while" "(" cond_expr ")"

put_function
        : "put" "(" put_argment ")"

put_argment
        : STRING
        | one_int_variable
        | one_flt_variable
        | int_variable
        | flt_variable

set_function
        : "set" "(" set_argment ")"

set_argment
        : address_variable "," PARAMETER "," set_argment_sub
        | address_variable "," PARAMETER "," PARAMETER

set_argment_sub
        : one_expr
        | set_argment_sub "," one_expr

mass_expr
        : one_expr
        | mass_expr "," one_expr
        | addr_int_variable     "=" one_expr
        | addr_flt_variable     "=" one_expr
        | addr_one_int_variable "=" one_expr
        | addr_one_flt_variable "=" one_expr

one_expr
        : value_variable
        | function
        | "(" one_expr ")"
        | "(" TYPE ")" one_expr %prec TOPOP
        | "++" one_expr
        | "--" one_expr
        | "+"  one_expr      %prec TOPOP
        | "-"  one_expr      %prec TOPOP
        | one_expr "*" one_expr
        | one_expr "/" one_expr
        | one_expr "%" one_expr
        | one_expr "+" one_expr
        | one_expr "-" one_expr
        | one_expr "++"
        | one_expr "--"

cond_expr
        : "(" cond_expr ")"
        | one_expr ">"  one_expr
        | one_expr ">=" one_expr
        | one_expr "<"  one_expr
        | one_expr "<=" one_expr
        | one_expr "==" one_expr
        | one_expr "!=" one_expr 
        | one_expr "||" one_expr
        | one_expr "&&" one_expr 

address_variable
        : iCUB_VAL
        | fCUB_VAL
        | iIMG_VAL
        | fIMG_VAL
        | addr_one_int_variable
        | addr_one_flt_variable

addr_one_int_variable
        : INT_VAL

addr_one_flt_variable
        : FLT_VAL

addr_int_variable
        : iCUB_VAL "(" one_expr "," one_expr "," one_expr ")"
        | iIMG_VAL "(" one_expr "," one_expr ")"
        | INT_VAL  "[" one_expr "]"

addr_flt_variable
        : fCUB_VAL "(" one_expr "," one_expr "," one_expr ")"
        | fIMG_VAL "(" one_expr "," one_expr ")"
        | FLT_VAL  "[" one_expr "]"

value_variable
        : constant
        | one_int_variable
        | one_flt_variable
        | int_variable
        | flt_variable

constant
        : INTEGER
        | FLOTING
        | STRING

one_int_variable
        : INT_VAL

one_flt_variable
        : FLT_VAL

int_variable
        : iCUB_VAL "(" one_expr "," one_expr "," one_expr ")"
        | iIMG_VAL "(" one_expr "," one_expr ")"
        | INT_VAL  "[" one_expr "]"

flt_variable
        : fCUB_VAL "(" one_expr "," one_expr "," one_expr ")"
        | fIMG_VAL "(" one_expr "," one_expr ")"
        | FLT_VAL  "[" one_expr "]"

function
        : FUNC "(" argment_list ")"

argment_list
        :
        | argment
        | argment_list "," argment

argment : address_variable
        | constant
        | NO_DEFINE
        | PARAMETER

前へ  次へ