/[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 2951 by schoenebeck, Fri Jul 15 20:07:47 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}+/{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);
99        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 */   /* there is currently no support for floating point numbers in NKSP yet */
122   /*{DIGIT}+"."{DIGIT}* {   /*{DIGIT}+"."{DIGIT}* {
123      yyextra->token = NumberLiteralToken(yytext);      yyextra->token = NumberLiteralToken(yytext);
# Line 214  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;
# Line 225  end { Line 270  end {
270      return yyextra->token.baseType;      return yyextra->token.baseType;
271  }  }
272    
273  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 {
274      yyextra->token = KeywordToken(yytext);      yyextra->token = KeywordToken(yytext);
275      return yyextra->token.baseType;      return yyextra->token.baseType;
276  }  }

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

  ViewVC Help
Powered by ViewVC