Question on lex's disambiguating rules

andrea@eric.mpr.ca (Jennitta Andrea)
Thu, 21 Jun 90 03:33:49 GMT

          From comp.compilers

Related articles
Question on lex's disambiguating rules andrea@eric.mpr.ca (1990-06-21)
Re: Question on lex's disambiguating rules utoddl@uncecs.edu (1990-06-21)
Re: Question on lex's disambiguating rules vern@cs.cornell.edu (1990-06-21)
Re: Question on lex's disambiguating rules rekers@cwi.nl (1990-06-27)
| List of all articles for this month |

Newsgroups: comp.compilers
From: andrea@eric.mpr.ca (Jennitta Andrea)
Date: Thu, 21 Jun 90 03:33:49 GMT
Organization: Microtel Pacific Research Ltd., Burnaby, B.C., Canada
Keywords: lex, question

I would like to know if there is any way to override lex's disambiguating
rules, ie:

    "When more than one expression can match the current input, Lex
      chooses as follows:
          1) The longest match is preferred.

          2) Among rules which matched the same number of
                    characters, the rule given first is preferred"

(from M.E. Lesk and E. Schmidt, "Lex - A Lexical Analyzer Generator",
  Computing Science Technical Report 39, Bell Telephone Laboratories,
  Murray Hill, NJ, 1975).

I would like to tell lex to 'commit' to recognizing a
specific regular expression, even though a more general regular
expression should be selected based on rule (1) above.

Specifically, given the following macro definitions:

STRING ([^ \t\n]+)
DIGIT ([0-9])

I have two regular expressions:

{D}{D}":"{D}{D}":"{D}{D} { /* recognize "TIMESTAMP" token */ }

{STRING} { /* recognize STRING token */ }

Because my definition of a "STRING" is so general, the following input
stream:

      12:30:49AC

is tokenized into a single STRING token ("12:30:49AC"), rather than into a
TIMESTAMP token ("12:30:49") and a STRING token ("AC").

Any suggestions on this question would be greatly appreciated.

Jennitta Andrea | Voice : (604) 293-5362
[How about trailing context after a slash? -John]
--


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.