/[svn]/linuxsampler/trunk/src/scriptvm/editor/nksp.l
ViewVC logotype

Diff of /linuxsampler/trunk/src/scriptvm/editor/nksp.l

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

revision 2885 by schoenebeck, Fri Apr 22 15:37:45 2016 UTC revision 3562 by schoenebeck, Fri Aug 23 12:51:58 2019 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (c) 2015-2016 Christian Schoenebeck   * Copyright (c) 2015-2019 Christian Schoenebeck
3   *   *
4   * http://www.linuxsampler.org   * http://www.linuxsampler.org
5   *   *
# Line 42  static int countNewLineChars(const char* Line 42  static int countNewLineChars(const char*
42      return n;      return n;
43  }  }
44    
45    // shut up warning that 'register' keyword is deprecated as of C++11
46    #if defined(__cplusplus) && __cplusplus >= 201103L
47    # define register
48    #endif
49    
50    // Since this parser is solely used by script code editors, thus not used in a
51    // real-time context, always throw an exception instead of exiting on fatal
52    // lexer errors (so the debugger may pause with the appropriate back trace)
53    #include <stdexcept>
54    #define YY_FATAL_ERROR(msg) throw std::runtime_error(msg)
55    
56  %}  %}
57    
58  /* generate a reentrant safe scanner */  /* generate a reentrant safe scanner */
# Line 56  static int countNewLineChars(const char* Line 67  static int countNewLineChars(const char*
67  /* inclusive scanner conditions */  /* inclusive scanner conditions */
68  %s PREPROC_BODY_USE  %s PREPROC_BODY_USE
69  /* exclusive scanner conditions */  /* exclusive scanner conditions */
70  %x PREPROC_SET_COND PREPROC_RESET_COND PREPROC_IF PREPROC_IF_NOT PREPROC_BODY_EAT PREPROC_PRE_BODY_USE PREPROC_PRE_BODY_EAT PREPROC_EVENT_NAME PREPROC_END_NAME  %x PREPROC_SET_COND PREPROC_RESET_COND PREPROC_IF PREPROC_IF_NOT PREPROC_BODY_EAT PREPROC_PRE_BODY_USE PREPROC_PRE_BODY_EAT PREPROC_EVENT_NAME PREPROC_END_NAME METRIC UNIT
71    
72  DIGIT    [0-9]  DIGIT    [0-9]
73  ID       [a-zA-Z0-9_]*  ID       [a-zA-Z][a-zA-Z0-9_]*
74    METRIC   (k|h|da|d|c|m|u)
75    UNIT     (s|Hz|B)
76    END_ID   on|while|if|select|function|synchronized
77    
78  %%  %%
79    
# Line 73  ID       [a-zA-Z0-9_]* Line 87  ID       [a-zA-Z0-9_]*
87      return yyextra->token.baseType;      return yyextra->token.baseType;
88  }  }
89    
90  {DIGIT}+"."{DIGIT}* {  {DIGIT}+/{METRIC}{1,2} {
91        yy_push_state(METRIC, yyscanner);
92        yyextra->token = NumberLiteralToken(yytext);
93        return yyextra->token.baseType;
94    }
95    
96    {DIGIT}+/{UNIT} {
97        yy_push_state(UNIT, yyscanner);
98      yyextra->token = NumberLiteralToken(yytext);      yyextra->token = NumberLiteralToken(yytext);
99      return yyextra->token.baseType;      return yyextra->token.baseType;
100  }  }
101    
102    <METRIC>{METRIC}{1,2} {
103        yyextra->token = MetrixPrefixToken(yytext);
104        yy_pop_state(yyscanner);
105        return yyextra->token.baseType;
106    }
107    
108    <METRIC>{METRIC}{1,2}/{UNIT} {
109        yyextra->token = MetrixPrefixToken(yytext);
110        yy_pop_state(yyscanner);
111        yy_push_state(UNIT, yyscanner);
112        return yyextra->token.baseType;
113    }
114    
115    <UNIT>{UNIT} {
116        yyextra->token = StdUnitToken(yytext);
117        yy_pop_state(yyscanner);
118        return yyextra->token.baseType;
119    }
120    
121     /* there is currently no support for floating point numbers in NKSP yet */
122     /*{DIGIT}+"."{DIGIT}* {
123        yyextra->token = NumberLiteralToken(yytext);
124        return yyextra->token.baseType;
125     }*/
126    
127    
128   /* Preprocessor statement:  SET_CONDITION(name) */   /* Preprocessor statement:  SET_CONDITION(name) */
129    
# Line 213  end { Line 259  end {
259      return yyextra->token.baseType;      return yyextra->token.baseType;
260  }  }
261    
262  <PREPROC_END_NAME>[ \t]*{ID} {  <PREPROC_END_NAME>[ \t]*{END_ID}? {
263      yy_pop_state(yyscanner);      yy_pop_state(yyscanner);
264      yyextra->token = KeywordToken(yytext);      yyextra->token = KeywordToken(yytext);
265      return yyextra->token.baseType;      return yyextra->token.baseType;
266  }  }
267    
268  declare|while|if|or|and|not|else|case|select|to|mod|const|polyphonic {  ".or."|".and."|".not." {
269        yyextra->token = KeywordToken(yytext);
270        return yyextra->token.baseType;
271    }
272    
273    declare|while|if|or|and|not|else|case|select|to|mod|const|polyphonic|function|call|synchronized {
274      yyextra->token = KeywordToken(yytext);      yyextra->token = KeywordToken(yytext);
275      return yyextra->token.baseType;      return yyextra->token.baseType;
276  }  }

Legend:
Removed from v.2885  
changed lines
  Added in v.3562

  ViewVC Help
Powered by ViewVC