class
     POLY_LEX

inherit
     L_INTERFACE

     CONSTANTS
           undefine
                 consistent,
                 copy,
                 is_equal,
                 setup
           end

feature {NONE}

     obtain_analyzer is
                 -- Create lexical analyzer for the Polynomial language
           do
                 ignore_case
                 keywords_ignore_case
                 build_expressions
                 build_keywords
                 set_separator_type (blanks)
           end

     build_expressions is
                 -- Define regular expressions
                 -- for the Polynomial language
           do
                 put_expression (special_expression, special, "Special")
                 put_expression ("*('a'..'z')", simple_identifier, "Simple_identifier")
                 put_expression ("+('0'..'9')", integer_constant, "Integer_constant")
                 put_expression ("+('\t'|'\n'|' ')", blanks, "Blanks")
           end

     special_expression: STRING is
                 -- Regular expression describing Special
           once
                 create Result.make (80)
                 Result.append ("('\050'..'\057')|")
                 Result.append ("('\072'..'\076')|")
                 Result.append ("'['|']'|'|'|'{'|'}'|%"->%"|%":=%"")
           end

     build_keywords is
                 -- Define keywords (special symbols)
                 -- for the Polynomial language
           do
                 put_keyword ("+", special)
                 put_keyword ("-", special)
                 put_keyword (";", special)
                 put_keyword (":", special)
                 put_keyword ("(", special)
                 put_keyword (")", special)
                 put_keyword ("*", special)
           end
     
end -- class POLY_LEX