/[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 3054 by schoenebeck, Thu Dec 15 12:47:45 2016 UTC revision 3573 by schoenebeck, Tue Aug 27 21:36:53 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 47  static int countNewLineChars(const char* Line 47  static int countNewLineChars(const char*
47  # define register  # define register
48  #endif  #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 61  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 82  ID       [a-zA-Z0-9_]+
82      return yyextra->token.baseType;      return yyextra->token.baseType;
83  }  }
84    
85  {DIGIT}+ {  {DIGIT}+("."{DIGIT}+)? {
86        yyextra->token = NumberLiteralToken(yytext);
87        return yyextra->token.baseType;
88    }
89    
90    {DIGIT}+("."{DIGIT}+)?/{METRIC}{1,2} {
91        yy_push_state(METRIC, yyscanner);
92      yyextra->token = NumberLiteralToken(yytext);      yyextra->token = NumberLiteralToken(yytext);
93      return yyextra->token.baseType;      return yyextra->token.baseType;
94  }  }
95    
96   /* there is currently no support for floating point numbers in NKSP yet */  {DIGIT}+("."{DIGIT}+)?/{UNIT} {
97   /*{DIGIT}+"."{DIGIT}* {      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    
122   /* Preprocessor statement:  SET_CONDITION(name) */   /* Preprocessor statement:  SET_CONDITION(name) */
# Line 219  end { Line 253  end {
253      return yyextra->token.baseType;      return yyextra->token.baseType;
254  }  }
255    
256  <PREPROC_END_NAME>[ \t]*{ID} {  <PREPROC_END_NAME>[ \t]*{END_ID}? {
257      yy_pop_state(yyscanner);      yy_pop_state(yyscanner);
258      yyextra->token = KeywordToken(yytext);      yyextra->token = KeywordToken(yytext);
259      return yyextra->token.baseType;      return yyextra->token.baseType;
# Line 230  end { Line 264  end {
264      return yyextra->token.baseType;      return yyextra->token.baseType;
265  }  }
266    
267  declare|while|if|or|and|not|else|case|select|to|mod|const|polyphonic|function|call {  declare|while|if|or|and|not|else|case|select|to|mod|const|polyphonic|function|call|synchronized {
268      yyextra->token = KeywordToken(yytext);      yyextra->token = KeywordToken(yytext);
269      return yyextra->token.baseType;      return yyextra->token.baseType;
270  }  }
# Line 243  declare|while|if|or|and|not|else|case|se Line 277  declare|while|if|or|and|not|else|case|se
277      return yyextra->token.baseType;      return yyextra->token.baseType;
278  }  }
279    
280    "~"{ID} {
281        yyextra->token = RealVariableToken(yytext);
282        return yyextra->token.baseType;
283    }
284    
285  "@"{ID} {  "@"{ID} {
286      yyextra->token = StringVariableToken(yytext);      yyextra->token = StringVariableToken(yytext);
287      return yyextra->token.baseType;      return yyextra->token.baseType;
288  }  }
289    
290  "%"{ID} {  "%"{ID} {
291      yyextra->token = ArrayVariableToken(yytext);      yyextra->token = IntegerArrayVariableToken(yytext);
292        return yyextra->token.baseType;
293    }
294    
295    "?"{ID} {
296        yyextra->token = RealArrayVariableToken(yytext);
297      return yyextra->token.baseType;      return yyextra->token.baseType;
298  }  }
299    

Legend:
Removed from v.3054  
changed lines
  Added in v.3573

  ViewVC Help
Powered by ViewVC