From 4ecd2d2e401c699a8548987c45ef6217f0230e08 Mon Sep 17 00:00:00 2001 From: ache Date: Sat, 13 Feb 1999 14:14:47 +0000 Subject: syntax change: allow symbolic names as substitute first arg --- usr.bin/colldef/scan.l | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) (limited to 'usr.bin/colldef/scan.l') diff --git a/usr.bin/colldef/scan.l b/usr.bin/colldef/scan.l index 27439f4..405068d 100644 --- a/usr.bin/colldef/scan.l +++ b/usr.bin/colldef/scan.l @@ -1,4 +1,4 @@ -%x string name charmap defn nchar subs +%x string name charmap defn nchar subs subs2 %{ /*- * Copyright (c) 1995 Alex Tatmanjants @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: scan.l,v 1.7 1997/02/22 19:54:32 peter Exp $ + * $Id: scan.l,v 1.8 1999/02/12 20:39:06 ache Exp $ */ #include @@ -37,7 +37,7 @@ #include "collate.h" #include "y.tab.h" -int line_no = 1, save_no; +int line_no = 1, save_no, fromsubs; u_char buf[STR_LEN], *ptr; FILE *map_fp; extern char map_name[]; @@ -48,21 +48,22 @@ YYSTYPE yylval; #endif /* FLEX_DEBUG */ %} %% -[ \t]+ ; -\" { ptr = buf; BEGIN(string); } -\< { ptr = buf; BEGIN(name); } +[ \t]+ ; +\" { ptr = buf; BEGIN(string); } +\< { ptr = buf; fromsubs = 1; BEGIN(name); } +\< { ptr = buf; fromsubs = 0; BEGIN(name); } ^#.*\n line_no++; ^\n line_no++; \\\n line_no++; -\\t { yylval.ch = '\t'; return CHAR; } -\\n { yylval.ch = '\n'; return CHAR; } -\\b { yylval.ch = '\b'; return CHAR; } -\\f { yylval.ch = '\f'; return CHAR; } -\\v { yylval.ch = '\v'; return CHAR; } -\\r { yylval.ch = '\r'; return CHAR; } -\\a { yylval.ch = '\a'; return CHAR; } -\\. { yylval.ch = yytext[1]; return CHAR; } -\n { +\\t { yylval.ch = '\t'; return CHAR; } +\\n { yylval.ch = '\n'; return CHAR; } +\\b { yylval.ch = '\b'; return CHAR; } +\\f { yylval.ch = '\f'; return CHAR; } +\\v { yylval.ch = '\v'; return CHAR; } +\\r { yylval.ch = '\r'; return CHAR; } +\\a { yylval.ch = '\a'; return CHAR; } +\\. { yylval.ch = yytext[1]; return CHAR; } +\n { line_no++; BEGIN(INITIAL); return '\n'; @@ -77,18 +78,18 @@ YYSTYPE yylval; } [;,{}()] return *yytext; substitute { BEGIN(subs); return SUBSTITUTE; } -with return WITH; +with { BEGIN(subs2); return WITH; } order return ORDER; charmap BEGIN(charmap); ;[ \t]*\.\.\.[ \t]*; return RANGE; -\\[0-7]{3} { +\\[0-7]{3} { u_int v; sscanf(&yytext[1], "%o", &v); yylval.ch = (u_char)v; return CHAR; } -\\x[0-9a-z]{2} { +\\x[0-9a-z]{2} { u_int v; sscanf(&yytext[2], "%x", &v); @@ -106,7 +107,7 @@ YYSTYPE yylval; strcpy(yylval.str, yytext); return CHAIN; } -. { +. { yylval.ch = *yytext; return CHAR; } @@ -151,13 +152,16 @@ YYSTYPE yylval; buf, line_no); findit: yylval.ch = i; - BEGIN(INITIAL); + if (fromsubs) + BEGIN(subs); + else + BEGIN(INITIAL); return CHAR; } \" { *ptr = '\0'; strcpy(yylval.str, buf); - BEGIN(subs); + BEGIN(subs2); return STRING; } . { -- cgit v1.1