/[svn]/linuxsampler/trunk/src/network/lscp.y
ViewVC logotype

Diff of /linuxsampler/trunk/src/network/lscp.y

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1345 by iliev, Thu Sep 13 21:46:25 2007 UTC revision 1399 by schoenebeck, Thu Oct 11 18:53:29 2007 UTC
# Line 101  int octalsToNumber(char oct_digit0, char Line 101  int octalsToNumber(char oct_digit0, char
101      return atoi(d2)*8*8 + atoi(d1)*8 + atoi(d0);      return atoi(d2)*8*8 + atoi(d1)*8 + atoi(d0);
102  }  }
103    
 int hexToNumber(char hex_digit) {  
     switch (hex_digit) {  
         case '0': return 0;  
         case '1': return 1;  
         case '2': return 2;  
         case '3': return 3;  
         case '4': return 4;  
         case '5': return 5;  
         case '6': return 6;  
         case '7': return 7;  
         case '8': return 8;  
         case '9': return 9;  
         // grammar rule 'digit_hex' already forced lower case  
         case 'a': return 10;  
         case 'b': return 11;  
         case 'c': return 12;  
         case 'd': return 13;  
         case 'e': return 14;  
         case 'f': return 15;  
         default:  return 0;  
     }  
 }  
   
 int hexsToNumber(char hex_digit0, char hex_digit1 = '0') {  
     return hexToNumber(hex_digit1)*16 + hexToNumber(hex_digit0);  
 }  
   
104  %}  %}
105    
106  // reentrant parser  // reentrant parser
# Line 141  int hexsToNumber(char hex_digit0, char h Line 114  int hexsToNumber(char hex_digit0, char h
114  %type <Char> char char_base digit digit_oct digit_hex escape_seq escape_seq_octal escape_seq_hex  %type <Char> char char_base digit digit_oct digit_hex escape_seq escape_seq_octal escape_seq_hex
115  %type <Dotnum> dotnum volume_value boolean  %type <Dotnum> dotnum volume_value boolean
116  %type <Number> number sampler_channel instrument_index fx_send_id audio_channel_index device_index midi_input_channel_index midi_input_port_index midi_map midi_bank midi_prog midi_ctrl  %type <Number> number sampler_channel instrument_index fx_send_id audio_channel_index device_index midi_input_channel_index midi_input_port_index midi_map midi_bank midi_prog midi_ctrl
117  %type <String> string string_escaped text text_escaped textval_escaped stringval stringval_escaped digits param_val_list param_val query_val filename db_path map_name entry_name fx_send_name engine_name command add_instruction create_instruction destroy_instruction get_instruction list_instruction load_instruction set_chan_instruction load_instr_args load_engine_args audio_output_type_name midi_input_type_name remove_instruction unmap_instruction set_instruction subscribe_event unsubscribe_event map_instruction reset_instruction clear_instruction find_instruction move_instruction copy_instruction scan_mode edit_instruction  %type <String> string string_escaped text text_escaped text_escaped_base stringval stringval_escaped digits param_val_list param_val query_val filename db_path map_name entry_name fx_send_name engine_name command add_instruction create_instruction destroy_instruction get_instruction list_instruction load_instruction set_chan_instruction load_instr_args load_engine_args audio_output_type_name midi_input_type_name remove_instruction unmap_instruction set_instruction subscribe_event unsubscribe_event map_instruction reset_instruction clear_instruction find_instruction move_instruction copy_instruction scan_mode edit_instruction format_instruction
118  %type <FillResponse> buffer_size_type  %type <FillResponse> buffer_size_type
119  %type <KeyValList> key_val_list query_val_list  %type <KeyValList> key_val_list query_val_list
120  %type <LoadMode> instr_load_mode  %type <LoadMode> instr_load_mode
# Line 198  command               :  ADD SP add_inst Line 171  command               :  ADD SP add_inst
171                        |  MOVE SP move_instruction              { $$ = $3;                                                }                        |  MOVE SP move_instruction              { $$ = $3;                                                }
172                        |  COPY SP copy_instruction              { $$ = $3;                                                }                        |  COPY SP copy_instruction              { $$ = $3;                                                }
173                        |  EDIT SP edit_instruction              { $$ = $3;                                                }                        |  EDIT SP edit_instruction              { $$ = $3;                                                }
174                          |  FORMAT SP format_instruction          { $$ = $3;                                                }
175                        |  RESET                                 { $$ = LSCPSERVER->ResetSampler();                        }                        |  RESET                                 { $$ = LSCPSERVER->ResetSampler();                        }
176                        |  QUIT                                  { LSCPSERVER->AnswerClient("Bye!\r\n"); return LSCP_QUIT; }                        |  QUIT                                  { LSCPSERVER->AnswerClient("Bye!\r\n"); return LSCP_QUIT; }
177                        ;                        ;
# Line 400  set_chan_instruction  :  AUDIO_OUTPUT_DE Line 374  set_chan_instruction  :  AUDIO_OUTPUT_DE
374  edit_instruction      :  INSTRUMENT SP sampler_channel  { $$ = LSCPSERVER->EditSamplerChannelInstrument($3); }  edit_instruction      :  INSTRUMENT SP sampler_channel  { $$ = LSCPSERVER->EditSamplerChannelInstrument($3); }
375                        ;                        ;
376    
377    format_instruction    :  INSTRUMENTS_DB  { $$ = LSCPSERVER->FormatInstrumentsDb(); }
378                          ;
379    
380  modal_arg             :  /* epsilon (empty argument) */  { $$ = true;  }  modal_arg             :  /* epsilon (empty argument) */  { $$ = true;  }
381                        |  NON_MODAL SP                    { $$ = false; }                        |  NON_MODAL SP                    { $$ = false; }
382                        ;                        ;
# Line 493  filename                  :  path  { $$ Line 470  filename                  :  path  { $$
470  db_path                   :  path  { $$ = $1.toDbPath(); }  db_path                   :  path  { $$ = $1.toDbPath(); }
471                            ;                            ;
472    
473  map_name                  :  stringval  map_name                  :  stringval_escaped
474                            ;                            ;
475    
476  entry_name                :  stringval  entry_name                :  stringval_escaped
477                            ;                            ;
478    
479  fx_send_name              :  stringval  fx_send_name              :  stringval_escaped
480                            ;                            ;
481    
482  param_val_list            :  param_val  param_val_list            :  param_val
483                            |  param_val_list','param_val  { $$ = $1 + "," + $3; }                            |  param_val_list','param_val  { $$ = $1 + "," + $3; }
484                            ;                            ;
485    
486  param_val                 :  string  //TODO: the re-encapsulation into apostrophes for string and strinval here is a hack, since we need a way for __parse_strings() (DeviceParameters.cpp) to distinguish a comma separated list of strings and a string which contains commas. A clean solution would be to move those parser jobs over here to lscp.y
487                            |  stringval  param_val                 :  string            { $$ = "\'" + $1 + "\'"; }
488                              |  stringval         { $$ = "\'" + $1 + "\'"; }
489                            |  number            { std::stringstream ss; ss << "\'" << $1 << "\'"; $$ = ss.str(); }                            |  number            { std::stringstream ss; ss << "\'" << $1 << "\'"; $$ = ss.str(); }
490                            |  dotnum            { std::stringstream ss; ss << "\'" << $1 << "\'"; $$ = ss.str(); }                            |  dotnum            { std::stringstream ss; ss << "\'" << $1 << "\'"; $$ = ss.str(); }
491                            ;                            ;
# Line 516  query_val_list            :  string '=' Line 494  query_val_list            :  string '='
494                            |  query_val_list SP string '=' query_val  { $$ = $1; $$[$3] = $5; }                            |  query_val_list SP string '=' query_val  { $$ = $1; $$[$3] = $5; }
495                            ;                            ;
496    
497  query_val                 :  textval_escaped  query_val                 :  text_escaped
498                            |  stringval_escaped                            |  stringval_escaped
499                            ;                            ;
500    
# Line 534  boolean               :  number  { $$ = Line 512  boolean               :  number  { $$ =
512                        |  string  { $$ = -1; }                        |  string  { $$ = -1; }
513                        ;                        ;
514    
515  dotnum                :      digits '.' digits  { $$ = atof(String($1 + "." + $3).c_str());                         }  dotnum                :      digits '.' digits  { std::stringstream ss($1 + "." + $3); ss.imbue(std::locale::classic()); ss >> $$; }
516                        |  '+' digits '.' digits  { String s = "+"; s += $2; s += "."; s += $4; $$ = atof(s.c_str()); }                        |  '+' digits '.' digits  { std::stringstream ss($2 + "." + $4); ss.imbue(std::locale::classic()); ss >> $$; }
517                        |  '-' digits '.' digits  { $$ = atof(String("-" + $2 + "." + $4).c_str());                   }                        |  '-' digits '.' digits  { std::stringstream ss("-" + $2 + "." + $4); ss.imbue(std::locale::classic()); ss >> $$; }
518                        ;                        ;
519    
520    
# Line 606  path                  :  '\'' path_base Line 584  path                  :  '\'' path_base
584                        |  '\"' path_base '\"'  { $$ = $2; }                        |  '\"' path_base '\"'  { $$ = $2; }
585                        ;                        ;
586    
587  path_base             :  '/'                     { $$ = Path();                           }  path_base             :  '/'                          { $$ = Path();                           }
588                        |  path_base '/'           { $$ = $1;                               }                        |  path_base '/'                { $$ = $1;                               }
589                        |  path_base text_escaped  { Path p; p.appendNode($2); $$ = $1 + p; }                        |  path_base text_escaped_base  { Path p; p.appendNode($2); $$ = $1 + p; }
590                        ;                        ;
591    
592  stringval             :  '\'' text '\''  { $$ = $2; }  stringval             :  '\'' text '\''  { $$ = $2; }
593                        |  '\"' text '\"'  { $$ = $2; }                        |  '\"' text '\"'  { $$ = $2; }
594                        ;                        ;
595    
596  stringval_escaped     :  '\'' textval_escaped '\''  { $$ = $2; }  stringval_escaped     :  '\'' text_escaped '\''  { $$ = $2; }
597                        |  '\"' textval_escaped '\"'  { $$ = $2; }                        |  '\"' text_escaped '\"'  { $$ = $2; }
598                        ;                        ;
599    
600  text                  :  SP           { $$ = " ";      }  text                  :  SP           { $$ = " ";      }
# Line 625  text                  :  SP           { Line 603  text                  :  SP           {
603                        |  text string  { $$ = $1 + $2;  }                        |  text string  { $$ = $1 + $2;  }
604                        ;                        ;
605    
606  text_escaped          :  SP                           { $$ = " ";      }  // like text_escaped, but missing the slash ('/') character
607    text_escaped_base     :  SP                                { $$ = " ";      }
608                        |  string_escaped                        |  string_escaped
609                        |  text_escaped SP              { $$ = $1 + " "; }                        |  text_escaped_base SP              { $$ = $1 + " "; }
610                        |  text_escaped string_escaped  { $$ = $1 + $2;  }                        |  text_escaped_base string_escaped  { $$ = $1 + $2;  }
611                        ;                        ;
612    
613  textval_escaped       :  '/'                           { $$ = "/";      }  text_escaped          :  '/'                              { $$ = "/";      }
614                        |  text_escaped                        |  text_escaped_base
615                        |  textval_escaped '/'           { $$ = $1 + "/"; }                        |  text_escaped '/'                 { $$ = $1 + "/"; }
616                        |  textval_escaped text_escaped  { $$ = $1 + $2;  }                        |  text_escaped text_escaped_base   { $$ = $1 + $2;  }
617                        ;                        ;
618    
619  string                :  char          { std::string s; s = $1; $$ = s; }  string                :  char          { std::string s; s = $1; $$ = s; }
# Line 949  DB_INSTRUMENT              :  'D''B''_'' Line 928  DB_INSTRUMENT              :  'D''B''_''
928  DB_INSTRUMENTS_JOB         :  'D''B''_''I''N''S''T''R''U''M''E''N''T''S''_''J''O''B'  DB_INSTRUMENTS_JOB         :  'D''B''_''I''N''S''T''R''U''M''E''N''T''S''_''J''O''B'
929                             ;                             ;
930    
931    INSTRUMENTS_DB             :  'I''N''S''T''R''U''M''E''N''T''S''_''D''B'
932                               ;
933    
934  DESCRIPTION                :  'D''E''S''C''R''I''P''T''I''O''N'  DESCRIPTION                :  'D''E''S''C''R''I''P''T''I''O''N'
935                             ;                             ;
936    
# Line 988  PERCENTAGE            :  'P''E''R''C''E' Line 970  PERCENTAGE            :  'P''E''R''C''E'
970  EDIT                  :  'E''D''I''T'  EDIT                  :  'E''D''I''T'
971                        ;                        ;
972    
973    FORMAT                :  'F''O''R''M''A''T'
974                          ;
975    
976  RESET                 :  'R''E''S''E''T'  RESET                 :  'R''E''S''E''T'
977                        ;                        ;
978    

Legend:
Removed from v.1345  
changed lines
  Added in v.1399

  ViewVC Help
Powered by ViewVC