From d2b50b59b37f3d4dc90f5e2960a155824f5c8e86 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:41:58 +0000 Subject: [PATCH] lilypond-0.0.58 --- .dstreamrc | 4 +- lily/lexer.l | 204 ++++++++++++++++++++++++++++----------------------- 2 files changed, 116 insertions(+), 92 deletions(-) diff --git a/.dstreamrc b/.dstreamrc index 7fd7b97e0a..1607370104 100644 --- a/.dstreamrc +++ b/.dstreamrc @@ -18,8 +18,8 @@ Parser 1 InitDeclarations 1 Declarations 1 # FlexLexer debug -InitLexer 1 -Lexer 1 +InitLexer 0 +Lexer 0 parse_duration 1 parse_pitchmod 1 diff --git a/lily/lexer.l b/lily/lexer.l index beab1c8150..d4435664ca 100644 --- a/lily/lexer.l +++ b/lily/lexer.l @@ -1,4 +1,12 @@ %{ // -*-Fundamental-*- +/* + lexer.l -- implement the Flex lexer + + source file of the LilyPond music typesetter + + (c) 1996,1997 Han-Wen Nienhuys +*/ + #include @@ -35,7 +43,7 @@ %x lyrics %x notes %x quote - +%x longcomment A [a-zA-Z] @@ -57,30 +65,45 @@ BLACK [^ \n\t\f] RESTNAME [rs] NOTECOMMAND \\{WORD} DOTS \.+ -LYRICS {AA}[^0-9 \t\n\f]* -COMMENT %.*\n +LYRICS ({AA}|{NATIONAL})[^0-9 \t\n\f]* %% -{COMMENT} { + +{ + "%{" { + yy_push_state(longcomment); + } + %[^{\n].*\n { + } + %\n { + } + {WHITE}+ { + + } } +{ + [^\%]* { + } + \%*[^}%]* { + } + "%"+"}" { + yy_pop_state(); + } +} \\include { yy_push_state(incl); } -{WHITE}* { /* eat the whitespace */ } \"[^"]*\" { /* got the include file name */ String s (YYText()+1); s = s.left_str(s.length_i()-1); mtor << "#include `" << s << "\'\n"; new_input(s,source_l_g); yy_pop_state(); -} -<*>{WHITE}+ { - } {RESTNAME} { const char *s = YYText(); @@ -98,99 +121,99 @@ COMMENT %.*\n s=s.left_str(s.length_i() - 1); return scan_bare_word(s); } -{ALPHAWORD}/\' { - post_quotes_b_ = true; - return scan_bare_word(YYText()); -} -\'+ { - yylval.i = YYLeng(); - if (post_quotes_b_) { - post_quotes_b_ = false; - return POST_QUOTES; - } else - return PRE_QUOTES; -} -{ALPHAWORD} { - return scan_bare_word(YYText()); +{ + {ALPHAWORD}/\' { + post_quotes_b_ = true; + return scan_bare_word(YYText()); + } + \'+ { + yylval.i = YYLeng(); + if (post_quotes_b_) { + post_quotes_b_ = false; + return POST_QUOTES; + } else + return PRE_QUOTES; + } + {ALPHAWORD} { + return scan_bare_word(YYText()); -} + } -{NOTECOMMAND} { - return scan_escaped_word(YYText()+1); -} + {NOTECOMMAND} { + return scan_escaped_word(YYText()+1); + } -{DOTS} { - yylval.i = strlen(YYText()); - return DOTS; -} -{INT} { - yylval.i = String_convert::dec2_i( String( YYText() ) ); - return INT; -} + {DOTS} { + yylval.i = strlen(YYText()); + return DOTS; + } + {INT} { + yylval.i = String_convert::dec2_i( String( YYText() ) ); + return INT; + } -\+\+ { - return CONCAT; -} -\" { - start_quote(); + \+\+ { + return CONCAT; + } + \" { + start_quote(); + } } - \" { start_quote(); } -\\\\ { - *yylval.string += '\\'; -} -\\\" { - *yylval.string +='\"'; -} -[^"]+ { - *yylval.string += YYText(); -} -\" { - mtor << "quoted string: `" << *yylval.string << "'\n"; - yy_pop_state(); - return STRING; +{ + \\\\ { + *yylval.string += '\\'; + } + \\\" { + *yylval.string +='\"'; + } + [^"]+ { + *yylval.string += YYText(); + } + \" { + mtor << "quoted string: `" << *yylval.string << "'\n"; + yy_pop_state(); + return STRING; + } } -\" { - start_quote(); -} -{DOTS} { - yylval.i = strlen(YYText()); - return DOTS; -} -{INT} { - yylval.i = String_convert::dec2_i( String( YYText() ) ); - return INT; -} -{NOTECOMMAND} { - return scan_escaped_word(YYText()+1); -} -{LYRICS} { - /* ugr. This sux. */ - String s (YYText()); - int i = 0; - while ((i=s.index_i("_")) != -1) // change word binding "_" to " " - *(s.ch_l() + i) = ' '; - if ((i=s.index_i("\\,")) != -1) // change "\," to TeX's "\c " - { - *(s.ch_l() + i + 1) = 'c'; - s = s.left_str(i+2) + " " + s.right_str(s.length_i()-i-2); - } - yylval.string = new String(s); - mtor << "lyric : `" << s << "'\n"; - return STRING; -} -\| { - return YYText()[0]; -} -[{}] { - return YYText()[0]; -} -. { - return yylval.c = YYText()[0]; +{ + + \" { + start_quote(); + } + {DOTS} { + yylval.i = strlen(YYText()); + return DOTS; + } + {INT} { + yylval.i = String_convert::dec2_i( String( YYText() ) ); + return INT; + } + {NOTECOMMAND} { + return scan_escaped_word(YYText()+1); + } + {LYRICS} { + /* ugr. This sux. */ + String s (YYText()); + int i = 0; + while ((i=s.index_i("_")) != -1) // change word binding "_" to " " + *(s.ch_l() + i) = ' '; + if ((i=s.index_i("\\,")) != -1) // change "\," to TeX's "\c " + { + *(s.ch_l() + i + 1) = 'c'; + s = s.left_str(i+2) + " " + s.right_str(s.length_i()-i-2); + } + yylval.string = new String(s); + mtor << "lyric : `" << s << "'\n"; + return STRING; + } + . { + return yylval.c = YYText()[0]; + } } <> { @@ -229,6 +252,7 @@ COMMENT %.*\n . { return yylval.c = YYText()[0]; } + \\. { char c= YYText()[1]; yylval.c = c; -- 2.39.5