Branch: Tag:

1996-11-03

1996-11-03 06:23:46 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

if(int i) implemeved

Rev: src/language.yacc:1.4

213:   }      %type <fnum> F_FLOAT - %type <number> modifiers modifier optional_dot_dot_dot - %type <number> assign F_NUMBER F_LOCAL arguments arguments2 - %type <number> optional_stars modifier_list - %type <string> F_IDENTIFIER F_STRING string_constant low_string - %type <string> optional_identifier cast simple_type +  + %type <string> F_IDENTIFIER + %type <string> F_STRING + %type <string> cast simple_type + %type <string> low_string + %type <string> optional_identifier   %type <string> optional_rename_inherit -  + %type <string> string_constant    - %type <number> F_ARRAY_ID F_BREAK F_CASE F_CATCH F_CONTINUE F_DEFAULT F_DO - %type <number> F_PREDEF F_ELSE F_FLOAT_ID F_FOR F_FOREACH F_FUNCTION_ID F_GAUGE - %type <number> F_IF F_INHERIT F_INLINE F_INT_ID F_LAMBDA F_MULTISET_ID F_MAPPING_ID - %type <number> F_MIXED_ID F_NO_MASK F_OBJECT_ID F_PRIVATE F_PROGRAM_ID - %type <number> F_PROTECTED F_PUBLIC F_RETURN F_SSCANF F_STATIC - %type <number> F_STRING_ID F_SWITCH F_VARARGS F_VOID_ID F_WHILE + %type <number> F_ARRAY_ID + %type <number> F_BREAK + %type <number> F_CASE + %type <number> F_CATCH + %type <number> F_CONTINUE + %type <number> F_DEFAULT + %type <number> F_DO + %type <number> F_ELSE + %type <number> F_FLOAT_ID + %type <number> F_FOR + %type <number> F_FOREACH + %type <number> F_FUNCTION_ID + %type <number> F_GAUGE + %type <number> F_IF + %type <number> F_INHERIT + %type <number> F_INLINE + %type <number> F_INT_ID + %type <number> F_LAMBDA + %type <number> F_LOCAL + %type <number> F_MAPPING_ID + %type <number> F_MIXED_ID + %type <number> F_MULTISET_ID + %type <number> F_NO_MASK + %type <number> F_NUMBER + %type <number> F_OBJECT_ID + %type <number> F_PREDEF + %type <number> F_PRIVATE + %type <number> F_PROGRAM_ID + %type <number> F_PROTECTED + %type <number> F_PUBLIC + %type <number> F_RETURN + %type <number> F_SSCANF + %type <number> F_STATIC + %type <number> F_STRING_ID + %type <number> F_SWITCH + %type <number> F_VARARGS + %type <number> F_VOID_ID + %type <number> F_WHILE + %type <number> arguments + %type <number> arguments2 + %type <number> assign + %type <number> modifier + %type <number> modifier_list + %type <number> modifiers + %type <number> optional_dot_dot_dot + %type <number> optional_stars      /* The following symbos return type information */    - %type <n> string expr01 expr00 comma_expr comma_expr_or_zero - %type <n> expr2 expr1 expr3 expr0 expr4 catch lvalue_list - %type <n> lambda for_expr block assoc_pair new_local_name - %type <n> expr_list2 m_expr_list m_expr_list2 statement gauge sscanf - %type <n> for do cond optional_else_part while statements - %type <n> local_name_list class catch_arg comma_expr_or_maxint - %type <n> unused2 foreach unused switch case return expr_list default - %type <n> continue break block_or_semi typeof + %type <n> assoc_pair + %type <n> block + %type <n> block_or_semi + %type <n> break + %type <n> case + %type <n> catch + %type <n> catch_arg + %type <n> class + %type <n> comma_expr + %type <n> comma_expr2 + %type <n> comma_expr_or_maxint + %type <n> comma_expr_or_zero + %type <n> cond + %type <n> continue + %type <n> default + %type <n> do + %type <n> expr00 + %type <n> expr01 + %type <n> expr1 + %type <n> expr2 + %type <n> expr3 expr0 + %type <n> expr4 + %type <n> expr_list + %type <n> expr_list2 + %type <n> for + %type <n> for_expr + %type <n> foreach + %type <n> gauge + %type <n> lambda + %type <n> local_name_list + %type <n> lvalue_list + %type <n> m_expr_list + %type <n> m_expr_list2 + %type <n> new_local_name + %type <n> optional_else_part + %type <n> return + %type <n> sscanf + %type <n> statement + %type <n> statements + %type <n> string + %type <n> switch + %type <n> typeof + %type <n> unused + %type <n> unused2 + %type <n> while   %%      all: program;      program: program def optional_semi_colon -  | /* empty */ ; +  | /* empty */ +  ;      optional_semi_colon: /* empty */ -  | ';' { yyerror("Extra ';'. Ignored."); }; +  | ';' { yyerror("Extra ';'. Ignored."); } +  ;      string_constant: low_string    | string_constant '+' low_string
263:   inheritance: modifiers F_INHERIT string_constant optional_rename_inherit ';'    {    simple_do_inherit($3,$1,$4); -  }; +  } +  ;    - block_or_semi: block { $$ = mknode(F_ARG_LIST,$1,mknode(F_RETURN,mkintnode(0),0)); } + block_or_semi: block +  { +  $$ = mknode(F_ARG_LIST,$1,mknode(F_RETURN,mkintnode(0),0)); +  }    | ';' { $$ = NULL;}    ;         type_or_error: simple_type    { -  if(local_variables->current_type) free_string(local_variables->current_type); +  if(local_variables->current_type) +  free_string(local_variables->current_type);    local_variables->current_type=$1;    }    | /* empty */
375:    {    reset_type_stack();    if(num_parse_error>5) YYACCEPT; -  } ; +  } +  ;         optional_dot_dot_dot: F_DOT_DOT_DOT { $$=1; }
401:    $3->str);       add_local_name($3, pop_type()); -  }; +  } +  ;      arguments: /* empty */ optional_comma { $$=0; }    | arguments2 optional_comma { $$=$1; }
420:    | F_INLINE { $$ = ID_INLINE | ID_NOMASK; }    ;    - modifiers: modifier_list { $$=current_modifiers=$1; } + modifiers: modifier_list { $$=current_modifiers=$1; } ;      modifier_list: /* empty */ { $$ = 0; } -  | modifier modifier_list -  { -  $$ = $1 | $2; -  } +  | modifier modifier_list { $$ = $1 | $2; }    ;      optional_stars: optional_stars '*' { $$=$1 + 1; }
463:    type_stack_mark();    type_stack_mark();    } -  function_type_list -  optional_dot_dot_dot -  ':' +  function_type_list optional_dot_dot_dot ':'    {    if ($4)    {
483:    type_stack_reverse();    type_stack_reverse();    } -  | { +  | /* empty */ +  {    push_type(T_MIXED);    push_type(T_MIXED);    push_type(T_MANY); -  }; +  } +  ;      function_type_list: /* Empty */ optional_comma    | function_type_list2 optional_comma
522:    type_stack_reverse();    }    ')' -  | { +  | /* empty */ +  {    push_type(T_MIXED);    push_type(T_MIXED);    }
531:         name_list: new_name -  | name_list ',' new_name; +  | name_list ',' new_name +  ;      new_name: optional_stars F_IDENTIFIER    {
555:    expr0    {    init_node=mknode(F_ARG_LIST,init_node, -  mkcastnode(void_type_string, mknode(F_ASSIGN,$5,mkidentifiernode($<number>4)))); +  mkcastnode(void_type_string, +  mknode(F_ASSIGN,$5, +  mkidentifiernode($<number>4))));    free_string($2); -  } ; +  } +  ;         new_local_name: optional_stars F_IDENTIFIER
565:    push_finished_type(local_variables->current_type);    while($1--) push_type(T_ARRAY);    add_local_name($2, pop_type()); -  $$=mkcastnode(void_type_string, -  mknode(F_ASSIGN,mkintnode(0), -  mklocalnode(islocal($2)))); +  $$=mknode(F_ASSIGN,mkintnode(0), mklocalnode(islocal($2)));    }    | optional_stars F_IDENTIFIER '=' expr0    {    push_finished_type(local_variables->current_type);    while($1--) push_type(T_ARRAY);    add_local_name($2, pop_type()); -  $$=mkcastnode(void_type_string, -  mknode(F_ASSIGN,$4, -  mklocalnode(islocal($2)))); +  $$=mknode(F_ASSIGN,$4,mklocalnode(islocal($2))); +  } +  ;    -  }; +     -  +    block:'{'    {    $<number>$=local_variables->current_number_of_locals;    } -  statements -  '}' +  statements '}'    {    while(local_variables->current_number_of_locals > $<number>2)    {
596:    free_string(local_variables->variable[e].type);    }    $$=$3; -  } ; +  } +  ;      local_name_list: new_local_name -  | local_name_list ',' new_local_name -  { -  $$=mknode(F_ARG_LIST,$1,$3); -  } +  | local_name_list ',' new_local_name { $$=mknode(F_ARG_LIST,$1,$3); }    ;      statements: { $$=0; }
613:    ;      statement: unused2 ';' { $$=$1; } -  | simple_type -  { -  if(local_variables->current_type) free_string(local_variables->current_type); -  local_variables->current_type=$1; -  } local_name_list ';' { $$=$3; } +     | cond    | while    | do
704:    free_string(type);    pop_locals();    $$=mkidentifiernode(f); -  } ; +  } +  ;      class: F_CLASS '{'    {    start_new_program();    } -  program -  '}' +  program '}'    {    struct svalue s;    s.u.program=end_program();
726:    }    $$=mksvaluenode(&s);    free_svalue(&s); -  } ; +  } +  ;    - cond: F_IF '(' comma_expr ')' -  statement -  optional_else_part + cond: F_IF '(' comma_expr ')' statement optional_else_part    {    $$=mknode('?',$3,mknode(':',$5,$6));    $$->line_number=$1;
743:    | F_ELSE statement { $$=$2; }    ;    - foreach: F_FOREACH '(' expr0 ',' expr4 ')' -  statement + foreach: F_FOREACH '(' expr0 ',' expr4 ')' statement    {    $$=mknode(F_FOREACH,mknode(F_VAL_LVAL,$3,$5),$7);    $$->line_number=$1; -  } ; +  } +  ;      do: F_DO statement F_WHILE '(' comma_expr ')' ';'    {    $$=mknode(F_DO,$2,$5);    $$->line_number=$1; -  } ; +  } +  ;    -  - for: F_FOR '(' unused ';' for_expr ';' unused ')' -  statement + for: F_FOR '(' unused ';' for_expr ';' unused ')' statement    {    int i=current_line;    current_line=$1;    $$=mknode(F_ARG_LIST,mkcastnode(void_type_string,$3),mknode(F_FOR,$5,mknode(':',$9,$7)));    current_line=i; -  } ; +  } +  ;       - while: F_WHILE '(' comma_expr ')' -  statement + while: F_WHILE '(' comma_expr ')' statement    {    int i=current_line;    current_line=$1;    $$=mknode(F_FOR,$3,mknode(':',$5,NULL));    current_line=i; -  } ; +  } +  ;      for_expr: /* EMPTY */ { $$=mkintnode(1); } -  | comma_expr; +  | comma_expr +  ;    - switch: F_SWITCH '(' comma_expr ')' -  statement + switch: F_SWITCH '(' comma_expr ')' statement    {    $$=mknode(F_SWITCH,$3,$5);    $$->line_number=$1; -  } ; +  } +  ;      case: F_CASE comma_expr ':'    {
808:    | F_RETURN comma_expr    {    $$=mknode(F_RETURN,$2,0); -  }; +  } +  ;      unused: { $$=0; }    | unused2    ;    - unused2: comma_expr + unused2: comma_expr { $$=mkcastnode(void_type_string,$1); } ; +  + comma_expr: comma_expr2 +  | type2    { -  $$=mkcastnode(void_type_string,$1); -  } +  if(local_variables->current_type) +  free_string(local_variables->current_type); +  local_variables->current_type=pop_type(); +  } local_name_list { $$=$3; }    ;    - comma_expr: expr0 -  | unused2 ',' expr0 +  + comma_expr2: expr0 +  | comma_expr2 ',' expr0    {    $$ = mknode(F_ARG_LIST,mkcastnode(void_type_string,$1),$3);    }    ;      expr00: expr0 -  | '@' expr0 -  { -  $$=mknode(F_PUSH_ARRAY,$2,0); -  }; +  | '@' expr0 { $$=mknode(F_PUSH_ARRAY,$2,0); };      expr0: expr01 -  | expr4 '=' expr0 -  { -  $$=mknode(F_ASSIGN,$3,$1); -  } -  | expr4 assign expr0 -  { -  $$=mknode($2,$1,$3); -  } -  | error assign expr01 -  { -  $$=0; -  }; +  | expr4 '=' expr0 { $$=mknode(F_ASSIGN,$3,$1); } +  | expr4 assign expr0 { $$=mknode($2,$1,$3); } +  | error assign expr01 { $$=0; } +  ;      expr01: expr1 { $$ = $1; } -  | expr1 '?' expr01 ':' expr01 -  { -  $$=mknode('?',$1,mknode(':',$3,$5)); -  }; +  | expr1 '?' expr01 ':' expr01 { $$=mknode('?',$1,mknode(':',$3,$5)); } +  ;      assign: F_AND_EQ { $$=F_AND_EQ; }    | F_OR_EQ { $$=F_OR_EQ; }
884:    | m_expr_list2 ',' assoc_pair { $$=mknode(F_ARG_LIST,$1,$3); }    ;    - assoc_pair: expr0 ':' expr1 -  { -  $$=mknode(F_ARG_LIST,$1,$3); -  } ; + assoc_pair: expr0 ':' expr1 { $$=mknode(F_ARG_LIST,$1,$3); } ;      expr1: expr2    | expr1 F_LOR expr1 { $$=mknode(F_LOR,$1,$3); }
973:    {    $$=mknode(F_RANGE,$1,mknode(F_ARG_LIST,$3,$5));    } -  | '(' comma_expr ')' { $$=$2; } +  | '(' comma_expr2 ')' { $$=$2; }    | '(' '{' expr_list '}' ')'    { $$=mkefuncallnode("aggregate",$3); }    | '(' '[' m_expr_list ']' ')'
1063:    | block    ;    - catch: F_CATCH catch_arg -  { -  $$=mknode(F_CATCH,$2,NULL); -  } ; + catch: F_CATCH catch_arg { $$=mknode(F_CATCH,$2,NULL); } ;      sscanf: F_SSCANF '(' expr0 ',' expr0 lvalue_list ')'    {    $$=mknode(F_SSCANF,mknode(F_ARG_LIST,$3,$5),$6);    } -  +  ;    -  +    lvalue_list: /* empty */ { $$ = 0; } -  | ',' expr4 lvalue_list -  { -  $$ = mknode(F_LVALUE_LIST,$2,$3); -  } ; +  | ',' expr4 lvalue_list { $$ = mknode(F_LVALUE_LIST,$2,$3); } +  ;      low_string: F_STRING    | low_string F_STRING
1089:    }    ;    - string: low_string -  { -  $$=mkstrnode($1); -  free_string($1); -  } ; + string: low_string { $$=mkstrnode($1); free_string($1); } ;         %%