diff options
author | ache <ache@FreeBSD.org> | 1996-10-16 03:12:22 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1996-10-16 03:12:22 +0000 |
commit | f5b4e8c2abd5160b9d821a234962354728748f49 (patch) | |
tree | 981a086d32426b26e3940c73565d5662776f9294 /usr.bin/colldef/scan.l | |
parent | 0b67136d65d40b2d2dda49a4e9a837e5ff5b59d3 (diff) | |
download | FreeBSD-src-f5b4e8c2abd5160b9d821a234962354728748f49.zip FreeBSD-src-f5b4e8c2abd5160b9d821a234962354728748f49.tar.gz |
Simplify and improve parser.
Clarify manpage.
Diffstat (limited to 'usr.bin/colldef/scan.l')
-rw-r--r-- | usr.bin/colldef/scan.l | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/usr.bin/colldef/scan.l b/usr.bin/colldef/scan.l index 6a7d0cf..d8c1116 100644 --- a/usr.bin/colldef/scan.l +++ b/usr.bin/colldef/scan.l @@ -41,6 +41,7 @@ int line_no = 1, save_no; u_char buf[STR_LEN], *ptr; FILE *map_fp; extern char map_name[]; +extern u_char charmap_table[UCHAR_MAX + 1][STR_LEN]; YY_BUFFER_STATE main_buf, map_buf; #ifdef FLEX_DEBUG YYSTYPE yylval; @@ -137,13 +138,21 @@ YYSTYPE yylval; *ptr++ = '"'; } <name>\> { + u_int i; + if (ptr == buf) - errx(EX_UNAVAILABLE, "name expected near line %u", + errx(EX_UNAVAILABLE, "non-empty name expected near line %u", line_no); *ptr = '\0'; - strcpy(yylval.str, buf); + for (i = 0; i <= UCHAR_MAX; i++) + if (strcmp(charmap_table[i], buf) == 0) + goto findit; + errx(EX_UNAVAILABLE, "name <%s> not 'charmap'-defined near line %u", + buf, line_no); + findit: + yylval.ch = i; BEGIN(INITIAL); - return NAME; + return CHAR; } <string>\" { *ptr = '\0'; |