diff options
author | Per Bothner <per@bothner.com> | 1993-04-10 08:35:32 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1993-04-10 08:35:32 +0000 |
commit | 5a7c9cceb78d65ffdd742ce71cbdf9390eeb41eb (patch) | |
tree | 5d7d98c7b61b6843d747a9a9a4017b6c3096a54f | |
parent | 1724c671dab246521850f8a31ddfd706aebb239d (diff) | |
download | gdb-5a7c9cceb78d65ffdd742ce71cbdf9390eeb41eb.zip gdb-5a7c9cceb78d65ffdd742ce71cbdf9390eeb41eb.tar.gz gdb-5a7c9cceb78d65ffdd742ce71cbdf9390eeb41eb.tar.bz2 |
* ch-exp.y: Clean up lexing of identifiers and
reserved words. (E.g. don't recognize FALSEXXX as the
keyword FALSE followed by the identifier XXX.)
Also, convert identifiers to lower case.
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/ch-exp.y | 136 |
2 files changed, 58 insertions, 85 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 279235f..8876786 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +Sat Apr 10 01:32:43 1993 Per Bothner (bothner@rtl.cygnus.com) + + * ch-exp.y: Clean up lexing of identifiers and + reserved words. (E.g. don't recognize FALSEXXX as the + keyword FALSE followed by the identifier XXX.) + Also, convert identifiers to lower case. + Fri Apr 9 15:53:19 1993 Stu Grossman (grossman@cygnus.com) * remote-mips.c, remote-monitor.c, remote-st2000.c: Convert to diff --git a/gdb/ch-exp.y b/gdb/ch-exp.y index 86c461f..2ce7286 100644 --- a/gdb/ch-exp.y +++ b/gdb/ch-exp.y @@ -1043,13 +1043,18 @@ match_simple_name_string () if (isalpha (*tokptr)) { + char *result; do { tokptr++; - } while (isalpha (*tokptr) || isdigit (*tokptr) || (*tokptr == '_')); + } while (isalnum (*tokptr) || (*tokptr == '_')); yylval.sval.ptr = lexptr; yylval.sval.length = tokptr - lexptr; lexptr = tokptr; - return (copy_name (yylval.sval)); + result = copy_name (yylval.sval); + for (tokptr = result; *tokptr; tokptr++) + if (isupper (*tokptr)) + *tokptr = tolower(*tokptr); + return result; } return (NULL); } @@ -1724,38 +1729,28 @@ struct token int token; }; -static const struct token tokentab6[] = +static const struct token idtokentab[] = { - { "LENGTH", LENGTH } -}; - -static const struct token tokentab5[] = -{ - { "LOWER", LOWER }, - { "UPPER", UPPER }, - { "ANDIF", ANDIF } -}; - -static const struct token tokentab4[] = -{ - { "PRED", PRED }, - { "SUCC", SUCC }, - { "CARD", CARD }, - { "SIZE", SIZE }, - { "ORIF", ORIF } -}; - -static const struct token tokentab3[] = -{ - { "NUM", NUM }, - { "ABS", ABS }, - { "MAX", MAX }, - { "MIN", MIN }, - { "MOD", MOD }, - { "REM", REM }, - { "NOT", NOT }, - { "XOR", LOGXOR }, - { "AND", LOGAND } + { "length", LENGTH }, + { "lower", LOWER }, + { "upper", UPPER }, + { "andif", ANDIF }, + { "pred", PRED }, + { "succ", SUCC }, + { "card", CARD }, + { "size", SIZE }, + { "orif", ORIF }, + { "num", NUM }, + { "abs", ABS }, + { "max", MAX }, + { "min", MIN }, + { "mod", MOD }, + { "rem", REM }, + { "not", NOT }, + { "xor", LOGXOR }, + { "and", LOGAND }, + { "in", IN }, + { "or", LOGIOR } }; static const struct token tokentab2[] = @@ -1765,9 +1760,7 @@ static const struct token tokentab2[] = { "->", POINTER }, { "/=", NOTEQUAL }, { "<=", LEQ }, - { ">=", GTR }, - { "IN", IN }, - { "OR", LOGIOR } + { ">=", GTR } }; /* Read one token, getting characters through lexptr. */ @@ -1846,42 +1839,6 @@ yylex () } break; } - /* See if it is a special token of length 6. */ - for (i = 0; i < sizeof (tokentab6) / sizeof (tokentab6[0]); i++) - { - if (STREQN (lexptr, tokentab6[i].operator, 6)) - { - lexptr += 6; - return (tokentab6[i].token); - } - } - /* See if it is a special token of length 5. */ - for (i = 0; i < sizeof (tokentab5) / sizeof (tokentab5[0]); i++) - { - if (STREQN (lexptr, tokentab5[i].operator, 5)) - { - lexptr += 5; - return (tokentab5[i].token); - } - } - /* See if it is a special token of length 4. */ - for (i = 0; i < sizeof (tokentab4) / sizeof (tokentab4[0]); i++) - { - if (STREQN (lexptr, tokentab4[i].operator, 4)) - { - lexptr += 4; - return (tokentab4[i].token); - } - } - /* See if it is a special token of length 3. */ - for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++) - { - if (STREQN (lexptr, tokentab3[i].operator, 3)) - { - lexptr += 3; - return (tokentab3[i].token); - } - } /* See if it is a special token of length 2. */ for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++) { @@ -1903,19 +1860,6 @@ yylex () case '>': return (*lexptr++); } - /* Look for other special tokens. */ - if (STREQN (lexptr, "TRUE", 4)) /* FIXME: What about lowercase? */ - { - yylval.ulval = 1; - lexptr += 4; - return (BOOLEAN_LITERAL); - } - if (STREQN (lexptr, "FALSE", 5)) /* FIXME: What about lowercase? */ - { - yylval.ulval = 0; - lexptr += 5; - return (BOOLEAN_LITERAL); - } /* Look for a float literal before looking for an integer literal, so we match as much of the input stream as possible. */ token = match_float_literal (); @@ -1941,6 +1885,28 @@ yylex () we can't classify what sort of name it is. */ simplename = match_simple_name_string (); + + /* See if it is a reserved identifier. */ + for (i = 0; i < sizeof (idtokentab) / sizeof (idtokentab[0]); i++) + { + if (STREQ (simplename, idtokentab[i].operator)) + { + return (idtokentab[i].token); + } + } + + /* Look for other special tokens. */ + if (STREQ (simplename, "true")) + { + yylval.ulval = 1; + return (BOOLEAN_LITERAL); + } + if (STREQ (lexptr, "false")) + { + yylval.ulval = 0; + return (BOOLEAN_LITERAL); + } + if (simplename != NULL) { sym = lookup_symbol (simplename, expression_context_block, |