//----------------------------------------------------
// The following code was generated by CUP v0.10l
// 23/09/2004 4:14:16 AM
//----------------------------------------------------

using System;
using System.Collections;

namespace CSFlex
{
    /** CUP v0.10l generated parser.
      * @version 23/09/2004 4:14:16 AM
      */
    public class LexParse : java_cup.runtime.lr_parser
    {
        /** Default constructor. */
        public LexParse() { }

        /** Constructor which sets the default scanner. */
        public LexParse(java_cup.runtime.Scanner s)
            : base(s) { }

        /** Production table. */
        protected static readonly short[][] _production_table = unpackFromShorts(
            new short[]
            {
                0,
                73,
                0,
                2,
                2,
                4,
                0,
                2,
                6,
                6,
                0,
                2,
                6,
                8,
                0,
                2,
                6,
                2,
                0,
                2,
                3,
                2,
                0,
                2,
                3,
                4,
                0,
                2,
                3,
                3,
                0,
                2,
                4,
                3,
                0,
                2,
                4,
                3,
                0,
                2,
                4,
                6,
                0,
                2,
                4,
                4,
                0,
                2,
                18,
                4,
                0,
                2,
                18,
                9,
                0,
                2,
                18,
                8,
                0,
                2,
                18,
                3,
                0,
                2,
                5,
                7,
                0,
                2,
                5,
                5,
                0,
                2,
                5,
                3,
                0,
                2,
                12,
                3,
                0,
                2,
                12,
                4,
                0,
                2,
                12,
                2,
                0,
                2,
                12,
                5,
                0,
                2,
                20,
                4,
                0,
                2,
                20,
                3,
                0,
                2,
                15,
                5,
                0,
                2,
                15,
                2,
                0,
                2,
                14,
                5,
                0,
                2,
                14,
                3,
                0,
                2,
                14,
                4,
                0,
                2,
                19,
                3,
                0,
                2,
                19,
                2,
                0,
                2,
                7,
                5,
                0,
                2,
                7,
                3,
                0,
                2,
                7,
                3,
                0,
                2,
                8,
                4,
                0,
                2,
                8,
                3,
                0,
                2,
                9,
                3,
                0,
                2,
                9,
                4,
                0,
                2,
                9,
                4,
                0,
                2,
                10,
                4,
                0,
                2,
                10,
                4,
                0,
                2,
                10,
                4,
                0,
                2,
                10,
                5,
                0,
                2,
                10,
                6,
                0,
                2,
                10,
                5,
                0,
                2,
                10,
                3,
                0,
                2,
                10,
                3,
                0,
                2,
                10,
                3,
                0,
                2,
                10,
                3,
                0,
                2,
                10,
                3,
                0,
                2,
                10,
                3,
                0,
                2,
                11,
                4,
                0,
                2,
                11,
                5,
                0,
                2,
                11,
                5,
                0,
                2,
                11,
                6,
                0,
                2,
                11,
                6,
                0,
                2,
                11,
                7,
                0,
                2,
                16,
                4,
                0,
                2,
                16,
                3,
                0,
                2,
                16,
                4,
                0,
                2,
                16,
                3,
                0,
                2,
                16,
                4,
                0,
                2,
                16,
                3,
                0,
                2,
                16,
                4,
                0,
                2,
                16,
                3,
                0,
                2,
                13,
                5,
                0,
                2,
                13,
                3,
                0,
                2,
                17,
                3,
                0,
                2,
                17,
                3,
                0,
                2,
                17,
                3,
                0,
                2,
                17,
                3,
                0,
                2,
                17,
                3,
                0,
                2,
                17,
                3,
                0,
            }
        );

        /** Access to production table. */
        public override short[][] production_table()
        {
            return _production_table;
        }

        /** Parse-action table. */
        protected static readonly short[][] _action_table = unpackFromShorts(
            new short[]
            {
                0,
                108,
                0,
                6,
                2,
                -2,
                32,
                4,
                1,
                2,
                0,
                12,
                3,
                8,
                11,
                -3,
                18,
                -3,
                19,
                -3,
                31,
                -3,
                1,
                2,
                0,
                4,
                2,
                6,
                1,
                2,
                0,
                4,
                2,
                1,
                1,
                2,
                0,
                10,
                11,
                12,
                18,
                9,
                19,
                11,
                31,
                10,
                1,
                2,
                0,
                10,
                11,
                -5,
                18,
                -5,
                19,
                -5,
                31,
                -5,
                1,
                2,
                0,
                10,
                11,
                -6,
                18,
                -6,
                19,
                -6,
                31,
                -6,
                1,
                2,
                0,
                4,
                12,
                108,
                1,
                2,
                0,
                10,
                11,
                -7,
                18,
                -7,
                19,
                -7,
                31,
                -7,
                1,
                2,
                0,
                40,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                14,
                14,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                10,
                11,
                -4,
                18,
                -4,
                19,
                -4,
                31,
                -4,
                1,
                2,
                0,
                4,
                31,
                95,
                1,
                2,
                0,
                46,
                2,
                -16,
                3,
                -16,
                4,
                -16,
                6,
                -16,
                8,
                -16,
                11,
                -16,
                14,
                -16,
                17,
                -16,
                21,
                -16,
                22,
                -16,
                23,
                -16,
                24,
                -16,
                25,
                -16,
                26,
                -16,
                27,
                -16,
                37,
                -16,
                39,
                -16,
                40,
                -16,
                41,
                -16,
                42,
                -16,
                43,
                -16,
                44,
                -16,
                1,
                2,
                0,
                46,
                2,
                -13,
                3,
                -13,
                4,
                -13,
                6,
                -13,
                8,
                -13,
                11,
                -13,
                14,
                -13,
                17,
                -13,
                21,
                -13,
                22,
                -13,
                23,
                -13,
                24,
                -13,
                25,
                -13,
                26,
                -13,
                27,
                -13,
                37,
                -13,
                39,
                -13,
                40,
                -13,
                41,
                -13,
                42,
                -13,
                43,
                -13,
                44,
                -13,
                1,
                2,
                0,
                44,
                2,
                0,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                11,
                92,
                14,
                91,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                36,
                4,
                -29,
                6,
                19,
                8,
                -29,
                21,
                -29,
                22,
                -29,
                23,
                -29,
                24,
                -29,
                25,
                -29,
                26,
                -29,
                27,
                21,
                37,
                -29,
                39,
                -29,
                40,
                -29,
                41,
                -29,
                42,
                -29,
                43,
                -29,
                44,
                -29,
                1,
                2,
                0,
                32,
                4,
                -28,
                8,
                -28,
                21,
                -28,
                22,
                -28,
                23,
                -28,
                24,
                -28,
                25,
                -28,
                26,
                -28,
                37,
                -28,
                39,
                -28,
                40,
                -28,
                41,
                -28,
                42,
                -28,
                43,
                -28,
                44,
                -28,
                1,
                2,
                0,
                32,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                37,
                43,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                4,
                30,
                22,
                1,
                2,
                0,
                46,
                2,
                -15,
                3,
                -15,
                4,
                -15,
                6,
                -15,
                8,
                -15,
                11,
                -15,
                14,
                -15,
                17,
                -15,
                21,
                -15,
                22,
                -15,
                23,
                -15,
                24,
                -15,
                25,
                -15,
                26,
                -15,
                27,
                -15,
                37,
                -15,
                39,
                -15,
                40,
                -15,
                41,
                -15,
                42,
                -15,
                43,
                -15,
                44,
                -15,
                1,
                2,
                0,
                32,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                37,
                43,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                50,
                4,
                -48,
                5,
                -48,
                7,
                -48,
                8,
                -48,
                20,
                -48,
                21,
                -48,
                22,
                -48,
                23,
                -48,
                24,
                -48,
                25,
                -48,
                26,
                -48,
                28,
                -48,
                29,
                -48,
                34,
                -48,
                35,
                -48,
                36,
                -48,
                37,
                -48,
                38,
                -48,
                39,
                -48,
                40,
                -48,
                41,
                -48,
                42,
                -48,
                43,
                -48,
                44,
                -48,
                1,
                2,
                0,
                52,
                4,
                -69,
                5,
                -69,
                7,
                -69,
                8,
                -69,
                9,
                -69,
                20,
                -69,
                21,
                -69,
                22,
                -69,
                23,
                -69,
                24,
                -69,
                25,
                -69,
                26,
                -69,
                28,
                -69,
                29,
                -69,
                34,
                -69,
                35,
                -69,
                36,
                -69,
                37,
                -69,
                38,
                -69,
                39,
                -69,
                40,
                -69,
                41,
                -69,
                42,
                -69,
                43,
                -69,
                44,
                -69,
                1,
                2,
                0,
                50,
                4,
                -45,
                5,
                -45,
                7,
                -45,
                8,
                -45,
                20,
                -45,
                21,
                -45,
                22,
                -45,
                23,
                -45,
                24,
                -45,
                25,
                -45,
                26,
                -45,
                28,
                -45,
                29,
                -45,
                34,
                -45,
                35,
                -45,
                36,
                -45,
                37,
                -45,
                38,
                -45,
                39,
                -45,
                40,
                -45,
                41,
                -45,
                42,
                -45,
                43,
                -45,
                44,
                -45,
                1,
                2,
                0,
                50,
                4,
                -49,
                5,
                -49,
                7,
                -49,
                8,
                -49,
                20,
                -49,
                21,
                -49,
                22,
                -49,
                23,
                -49,
                24,
                -49,
                25,
                -49,
                26,
                -49,
                28,
                -49,
                29,
                -49,
                34,
                -49,
                35,
                -49,
                36,
                -49,
                37,
                -49,
                38,
                -49,
                39,
                -49,
                40,
                -49,
                41,
                -49,
                42,
                -49,
                43,
                -49,
                44,
                -49,
                1,
                2,
                0,
                42,
                4,
                23,
                5,
                -31,
                7,
                -31,
                8,
                35,
                20,
                -31,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                28,
                -31,
                29,
                -31,
                37,
                -31,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                50,
                4,
                -47,
                5,
                -47,
                7,
                -47,
                8,
                -47,
                20,
                -47,
                21,
                -47,
                22,
                -47,
                23,
                -47,
                24,
                -47,
                25,
                -47,
                26,
                -47,
                28,
                -47,
                29,
                -47,
                34,
                -47,
                35,
                -47,
                36,
                -47,
                37,
                -47,
                38,
                -47,
                39,
                -47,
                40,
                -47,
                41,
                -47,
                42,
                -47,
                43,
                -47,
                44,
                -47,
                1,
                2,
                0,
                52,
                4,
                -66,
                5,
                -66,
                7,
                -66,
                8,
                -66,
                9,
                -66,
                20,
                -66,
                21,
                -66,
                22,
                -66,
                23,
                -66,
                24,
                -66,
                25,
                -66,
                26,
                -66,
                28,
                -66,
                29,
                -66,
                34,
                -66,
                35,
                -66,
                36,
                -66,
                37,
                -66,
                38,
                -66,
                39,
                -66,
                40,
                -66,
                41,
                -66,
                42,
                -66,
                43,
                -66,
                44,
                -66,
                1,
                2,
                0,
                30,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                50,
                4,
                -46,
                5,
                -46,
                7,
                -46,
                8,
                -46,
                20,
                -46,
                21,
                -46,
                22,
                -46,
                23,
                -46,
                24,
                -46,
                25,
                -46,
                26,
                -46,
                28,
                -46,
                29,
                -46,
                34,
                -46,
                35,
                -46,
                36,
                -46,
                37,
                -46,
                38,
                -46,
                39,
                -46,
                40,
                -46,
                41,
                -46,
                42,
                -46,
                43,
                -46,
                44,
                -46,
                1,
                2,
                0,
                50,
                4,
                -35,
                5,
                -35,
                7,
                -35,
                8,
                -35,
                20,
                -35,
                21,
                -35,
                22,
                -35,
                23,
                -35,
                24,
                -35,
                25,
                -35,
                26,
                -35,
                28,
                -35,
                29,
                -35,
                34,
                81,
                35,
                82,
                36,
                84,
                37,
                -35,
                38,
                83,
                39,
                -35,
                40,
                -35,
                41,
                -35,
                42,
                -35,
                43,
                -35,
                44,
                -35,
                1,
                2,
                0,
                42,
                4,
                -34,
                5,
                -34,
                7,
                -34,
                8,
                -34,
                20,
                -34,
                21,
                -34,
                22,
                -34,
                23,
                -34,
                24,
                -34,
                25,
                -34,
                26,
                -34,
                28,
                -34,
                29,
                -34,
                37,
                -34,
                39,
                -34,
                40,
                -34,
                41,
                -34,
                42,
                -34,
                43,
                -34,
                44,
                -34,
                1,
                2,
                0,
                26,
                6,
                62,
                9,
                58,
                10,
                61,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                59,
                44,
                63,
                1,
                2,
                0,
                12,
                7,
                48,
                20,
                -19,
                28,
                -19,
                29,
                46,
                37,
                47,
                1,
                2,
                0,
                52,
                4,
                -70,
                5,
                -70,
                7,
                -70,
                8,
                -70,
                9,
                -70,
                20,
                -70,
                21,
                -70,
                22,
                -70,
                23,
                -70,
                24,
                -70,
                25,
                -70,
                26,
                -70,
                28,
                -70,
                29,
                -70,
                34,
                -70,
                35,
                -70,
                36,
                -70,
                37,
                -70,
                38,
                -70,
                39,
                -70,
                40,
                -70,
                41,
                -70,
                42,
                -70,
                43,
                -70,
                44,
                -70,
                1,
                2,
                0,
                52,
                4,
                -68,
                5,
                -68,
                7,
                -68,
                8,
                -68,
                9,
                -68,
                20,
                -68,
                21,
                -68,
                22,
                -68,
                23,
                -68,
                24,
                -68,
                25,
                -68,
                26,
                -68,
                28,
                -68,
                29,
                -68,
                34,
                -68,
                35,
                -68,
                36,
                -68,
                37,
                -68,
                38,
                -68,
                39,
                -68,
                40,
                -68,
                41,
                -68,
                42,
                -68,
                43,
                -68,
                44,
                -68,
                1,
                2,
                0,
                50,
                4,
                -44,
                5,
                -44,
                7,
                -44,
                8,
                -44,
                20,
                -44,
                21,
                -44,
                22,
                -44,
                23,
                -44,
                24,
                -44,
                25,
                -44,
                26,
                -44,
                28,
                -44,
                29,
                -44,
                34,
                -44,
                35,
                -44,
                36,
                -44,
                37,
                -44,
                38,
                -44,
                39,
                -44,
                40,
                -44,
                41,
                -44,
                42,
                -44,
                43,
                -44,
                44,
                -44,
                1,
                2,
                0,
                30,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                52,
                4,
                -67,
                5,
                -67,
                7,
                -67,
                8,
                -67,
                9,
                -67,
                20,
                -67,
                21,
                -67,
                22,
                -67,
                23,
                -67,
                24,
                -67,
                25,
                -67,
                26,
                -67,
                28,
                -67,
                29,
                -67,
                34,
                -67,
                35,
                -67,
                36,
                -67,
                37,
                -67,
                38,
                -67,
                39,
                -67,
                40,
                -67,
                41,
                -67,
                42,
                -67,
                43,
                -67,
                44,
                -67,
                1,
                2,
                0,
                52,
                4,
                -71,
                5,
                -71,
                7,
                -71,
                8,
                -71,
                9,
                -71,
                20,
                -71,
                21,
                -71,
                22,
                -71,
                23,
                -71,
                24,
                -71,
                25,
                -71,
                26,
                -71,
                28,
                -71,
                29,
                -71,
                34,
                -71,
                35,
                -71,
                36,
                -71,
                37,
                -71,
                38,
                -71,
                39,
                -71,
                40,
                -71,
                41,
                -71,
                42,
                -71,
                43,
                -71,
                44,
                -71,
                1,
                2,
                0,
                14,
                5,
                -32,
                7,
                -32,
                20,
                -32,
                28,
                -32,
                29,
                -32,
                37,
                -32,
                1,
                2,
                0,
                42,
                4,
                -37,
                5,
                -37,
                7,
                -37,
                8,
                -37,
                20,
                -37,
                21,
                -37,
                22,
                -37,
                23,
                -37,
                24,
                -37,
                25,
                -37,
                26,
                -37,
                28,
                -37,
                29,
                -37,
                37,
                -37,
                39,
                -37,
                40,
                -37,
                41,
                -37,
                42,
                -37,
                43,
                -37,
                44,
                -37,
                1,
                2,
                0,
                6,
                20,
                54,
                28,
                55,
                1,
                2,
                0,
                32,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                37,
                43,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                30,
                4,
                23,
                8,
                35,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                6,
                20,
                -17,
                28,
                -17,
                1,
                2,
                0,
                42,
                4,
                23,
                5,
                -30,
                7,
                -30,
                8,
                35,
                20,
                -30,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                28,
                -30,
                29,
                -30,
                37,
                -30,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                42,
                4,
                -33,
                5,
                -33,
                7,
                -33,
                8,
                -33,
                20,
                -33,
                21,
                -33,
                22,
                -33,
                23,
                -33,
                24,
                -33,
                25,
                -33,
                26,
                -33,
                28,
                -33,
                29,
                -33,
                37,
                -33,
                39,
                -33,
                40,
                -33,
                41,
                -33,
                42,
                -33,
                43,
                -33,
                44,
                -33,
                1,
                2,
                0,
                10,
                7,
                52,
                20,
                -18,
                28,
                -18,
                37,
                47,
                1,
                2,
                0,
                6,
                20,
                -20,
                28,
                -20,
                1,
                2,
                0,
                46,
                2,
                -14,
                3,
                -14,
                4,
                -14,
                6,
                -14,
                8,
                -14,
                11,
                -14,
                14,
                -14,
                17,
                -14,
                21,
                -14,
                22,
                -14,
                23,
                -14,
                24,
                -14,
                25,
                -14,
                26,
                -14,
                27,
                -14,
                37,
                -14,
                39,
                -14,
                40,
                -14,
                41,
                -14,
                42,
                -14,
                43,
                -14,
                44,
                -14,
                1,
                2,
                0,
                4,
                30,
                56,
                1,
                2,
                0,
                46,
                2,
                -22,
                3,
                -22,
                4,
                -22,
                6,
                -22,
                8,
                -22,
                11,
                -22,
                14,
                -22,
                17,
                -22,
                21,
                -22,
                22,
                -22,
                23,
                -22,
                24,
                -22,
                25,
                -22,
                26,
                -22,
                27,
                -22,
                37,
                -22,
                39,
                -22,
                40,
                -22,
                41,
                -22,
                42,
                -22,
                43,
                -22,
                44,
                -22,
                1,
                2,
                0,
                46,
                2,
                -21,
                3,
                -21,
                4,
                -21,
                6,
                -21,
                8,
                -21,
                11,
                -21,
                14,
                -21,
                17,
                -21,
                21,
                -21,
                22,
                -21,
                23,
                -21,
                24,
                -21,
                25,
                -21,
                26,
                -21,
                27,
                -21,
                37,
                -21,
                39,
                -21,
                40,
                -21,
                41,
                -21,
                42,
                -21,
                43,
                -21,
                44,
                -21,
                1,
                2,
                0,
                24,
                9,
                -65,
                10,
                79,
                21,
                -65,
                22,
                -65,
                23,
                -65,
                24,
                -65,
                25,
                -65,
                26,
                -65,
                42,
                -65,
                43,
                -65,
                44,
                -65,
                1,
                2,
                0,
                50,
                4,
                -50,
                5,
                -50,
                7,
                -50,
                8,
                -50,
                20,
                -50,
                21,
                -50,
                22,
                -50,
                23,
                -50,
                24,
                -50,
                25,
                -50,
                26,
                -50,
                28,
                -50,
                29,
                -50,
                34,
                -50,
                35,
                -50,
                36,
                -50,
                37,
                -50,
                38,
                -50,
                39,
                -50,
                40,
                -50,
                41,
                -50,
                42,
                -50,
                43,
                -50,
                44,
                -50,
                1,
                2,
                0,
                22,
                9,
                -61,
                21,
                -61,
                22,
                -61,
                23,
                -61,
                24,
                -61,
                25,
                -61,
                26,
                -61,
                42,
                -61,
                43,
                -61,
                44,
                -61,
                1,
                2,
                0,
                22,
                9,
                -57,
                21,
                -57,
                22,
                -57,
                23,
                -57,
                24,
                -57,
                25,
                -57,
                26,
                -57,
                42,
                -57,
                43,
                -57,
                44,
                -57,
                1,
                2,
                0,
                20,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                59,
                44,
                63,
                1,
                2,
                0,
                24,
                9,
                71,
                10,
                72,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                59,
                44,
                63,
                1,
                2,
                0,
                22,
                9,
                -63,
                21,
                -63,
                22,
                -63,
                23,
                -63,
                24,
                -63,
                25,
                -63,
                26,
                -63,
                42,
                -63,
                43,
                -63,
                44,
                -63,
                1,
                2,
                0,
                22,
                9,
                69,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                68,
                44,
                70,
                1,
                2,
                0,
                22,
                9,
                -59,
                21,
                -59,
                22,
                -59,
                23,
                -59,
                24,
                -59,
                25,
                -59,
                26,
                -59,
                42,
                -59,
                43,
                -59,
                44,
                -59,
                1,
                2,
                0,
                22,
                9,
                -56,
                21,
                -56,
                22,
                -56,
                23,
                -56,
                24,
                -56,
                25,
                -56,
                26,
                -56,
                42,
                -56,
                43,
                -56,
                44,
                -56,
                1,
                2,
                0,
                22,
                9,
                -58,
                21,
                -58,
                22,
                -58,
                23,
                -58,
                24,
                -58,
                25,
                -58,
                26,
                -58,
                42,
                -58,
                43,
                -58,
                44,
                -58,
                1,
                2,
                0,
                22,
                9,
                -60,
                21,
                -60,
                22,
                -60,
                23,
                -60,
                24,
                -60,
                25,
                -60,
                26,
                -60,
                42,
                -60,
                43,
                -60,
                44,
                -60,
                1,
                2,
                0,
                50,
                4,
                -51,
                5,
                -51,
                7,
                -51,
                8,
                -51,
                20,
                -51,
                21,
                -51,
                22,
                -51,
                23,
                -51,
                24,
                -51,
                25,
                -51,
                26,
                -51,
                28,
                -51,
                29,
                -51,
                34,
                -51,
                35,
                -51,
                36,
                -51,
                37,
                -51,
                38,
                -51,
                39,
                -51,
                40,
                -51,
                41,
                -51,
                42,
                -51,
                43,
                -51,
                44,
                -51,
                1,
                2,
                0,
                22,
                9,
                -62,
                21,
                -62,
                22,
                -62,
                23,
                -62,
                24,
                -62,
                25,
                -62,
                26,
                -62,
                42,
                -62,
                43,
                -62,
                44,
                -62,
                1,
                2,
                0,
                50,
                4,
                -52,
                5,
                -52,
                7,
                -52,
                8,
                -52,
                20,
                -52,
                21,
                -52,
                22,
                -52,
                23,
                -52,
                24,
                -52,
                25,
                -52,
                26,
                -52,
                28,
                -52,
                29,
                -52,
                34,
                -52,
                35,
                -52,
                36,
                -52,
                37,
                -52,
                38,
                -52,
                39,
                -52,
                40,
                -52,
                41,
                -52,
                42,
                -52,
                43,
                -52,
                44,
                -52,
                1,
                2,
                0,
                20,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                59,
                44,
                63,
                1,
                2,
                0,
                22,
                9,
                74,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                68,
                44,
                70,
                1,
                2,
                0,
                50,
                4,
                -53,
                5,
                -53,
                7,
                -53,
                8,
                -53,
                20,
                -53,
                21,
                -53,
                22,
                -53,
                23,
                -53,
                24,
                -53,
                25,
                -53,
                26,
                -53,
                28,
                -53,
                29,
                -53,
                34,
                -53,
                35,
                -53,
                36,
                -53,
                37,
                -53,
                38,
                -53,
                39,
                -53,
                40,
                -53,
                41,
                -53,
                42,
                -53,
                43,
                -53,
                44,
                -53,
                1,
                2,
                0,
                22,
                9,
                76,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                68,
                44,
                70,
                1,
                2,
                0,
                50,
                4,
                -55,
                5,
                -55,
                7,
                -55,
                8,
                -55,
                20,
                -55,
                21,
                -55,
                22,
                -55,
                23,
                -55,
                24,
                -55,
                25,
                -55,
                26,
                -55,
                28,
                -55,
                29,
                -55,
                34,
                -55,
                35,
                -55,
                36,
                -55,
                37,
                -55,
                38,
                -55,
                39,
                -55,
                40,
                -55,
                41,
                -55,
                42,
                -55,
                43,
                -55,
                44,
                -55,
                1,
                2,
                0,
                22,
                9,
                78,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                42,
                57,
                43,
                68,
                44,
                70,
                1,
                2,
                0,
                50,
                4,
                -54,
                5,
                -54,
                7,
                -54,
                8,
                -54,
                20,
                -54,
                21,
                -54,
                22,
                -54,
                23,
                -54,
                24,
                -54,
                25,
                -54,
                26,
                -54,
                28,
                -54,
                29,
                -54,
                34,
                -54,
                35,
                -54,
                36,
                -54,
                37,
                -54,
                38,
                -54,
                39,
                -54,
                40,
                -54,
                41,
                -54,
                42,
                -54,
                43,
                -54,
                44,
                -54,
                1,
                2,
                0,
                4,
                42,
                80,
                1,
                2,
                0,
                22,
                9,
                -64,
                21,
                -64,
                22,
                -64,
                23,
                -64,
                24,
                -64,
                25,
                -64,
                26,
                -64,
                42,
                -64,
                43,
                -64,
                44,
                -64,
                1,
                2,
                0,
                6,
                17,
                86,
                34,
                85,
                1,
                2,
                0,
                50,
                4,
                -38,
                5,
                -38,
                7,
                -38,
                8,
                -38,
                20,
                -38,
                21,
                -38,
                22,
                -38,
                23,
                -38,
                24,
                -38,
                25,
                -38,
                26,
                -38,
                28,
                -38,
                29,
                -38,
                34,
                -38,
                35,
                -38,
                36,
                -38,
                37,
                -38,
                38,
                -38,
                39,
                -38,
                40,
                -38,
                41,
                -38,
                42,
                -38,
                43,
                -38,
                44,
                -38,
                1,
                2,
                0,
                50,
                4,
                -40,
                5,
                -40,
                7,
                -40,
                8,
                -40,
                20,
                -40,
                21,
                -40,
                22,
                -40,
                23,
                -40,
                24,
                -40,
                25,
                -40,
                26,
                -40,
                28,
                -40,
                29,
                -40,
                34,
                -40,
                35,
                -40,
                36,
                -40,
                37,
                -40,
                38,
                -40,
                39,
                -40,
                40,
                -40,
                41,
                -40,
                42,
                -40,
                43,
                -40,
                44,
                -40,
                1,
                2,
                0,
                50,
                4,
                -39,
                5,
                -39,
                7,
                -39,
                8,
                -39,
                20,
                -39,
                21,
                -39,
                22,
                -39,
                23,
                -39,
                24,
                -39,
                25,
                -39,
                26,
                -39,
                28,
                -39,
                29,
                -39,
                34,
                -39,
                35,
                -39,
                36,
                -39,
                37,
                -39,
                38,
                -39,
                39,
                -39,
                40,
                -39,
                41,
                -39,
                42,
                -39,
                43,
                -39,
                44,
                -39,
                1,
                2,
                0,
                4,
                17,
                87,
                1,
                2,
                0,
                50,
                4,
                -41,
                5,
                -41,
                7,
                -41,
                8,
                -41,
                20,
                -41,
                21,
                -41,
                22,
                -41,
                23,
                -41,
                24,
                -41,
                25,
                -41,
                26,
                -41,
                28,
                -41,
                29,
                -41,
                34,
                -41,
                35,
                -41,
                36,
                -41,
                37,
                -41,
                38,
                -41,
                39,
                -41,
                40,
                -41,
                41,
                -41,
                42,
                -41,
                43,
                -41,
                44,
                -41,
                1,
                2,
                0,
                50,
                4,
                -42,
                5,
                -42,
                7,
                -42,
                8,
                -42,
                20,
                -42,
                21,
                -42,
                22,
                -42,
                23,
                -42,
                24,
                -42,
                25,
                -42,
                26,
                -42,
                28,
                -42,
                29,
                -42,
                34,
                -42,
                35,
                -42,
                36,
                -42,
                37,
                -42,
                38,
                -42,
                39,
                -42,
                40,
                -42,
                41,
                -42,
                42,
                -42,
                43,
                -42,
                44,
                -42,
                1,
                2,
                0,
                42,
                4,
                -36,
                5,
                -36,
                7,
                -36,
                8,
                -36,
                20,
                -36,
                21,
                -36,
                22,
                -36,
                23,
                -36,
                24,
                -36,
                25,
                -36,
                26,
                -36,
                28,
                -36,
                29,
                -36,
                37,
                -36,
                39,
                -36,
                40,
                -36,
                41,
                -36,
                42,
                -36,
                43,
                -36,
                44,
                -36,
                1,
                2,
                0,
                6,
                5,
                90,
                37,
                47,
                1,
                2,
                0,
                50,
                4,
                -43,
                5,
                -43,
                7,
                -43,
                8,
                -43,
                20,
                -43,
                21,
                -43,
                22,
                -43,
                23,
                -43,
                24,
                -43,
                25,
                -43,
                26,
                -43,
                28,
                -43,
                29,
                -43,
                34,
                -43,
                35,
                -43,
                36,
                -43,
                37,
                -43,
                38,
                -43,
                39,
                -43,
                40,
                -43,
                41,
                -43,
                42,
                -43,
                43,
                -43,
                44,
                -43,
                1,
                2,
                0,
                4,
                31,
                95,
                1,
                2,
                0,
                4,
                33,
                94,
                1,
                2,
                0,
                46,
                2,
                -10,
                3,
                -10,
                4,
                -10,
                6,
                -10,
                8,
                -10,
                11,
                -10,
                14,
                -10,
                17,
                -10,
                21,
                -10,
                22,
                -10,
                23,
                -10,
                24,
                -10,
                25,
                -10,
                26,
                -10,
                27,
                -10,
                37,
                -10,
                39,
                -10,
                40,
                -10,
                41,
                -10,
                42,
                -10,
                43,
                -10,
                44,
                -10,
                1,
                2,
                0,
                4,
                2,
                -1,
                1,
                2,
                0,
                6,
                13,
                101,
                15,
                -26,
                1,
                2,
                0,
                4,
                15,
                97,
                1,
                2,
                0,
                38,
                4,
                -23,
                6,
                -23,
                8,
                -23,
                16,
                98,
                21,
                -23,
                22,
                -23,
                23,
                -23,
                24,
                -23,
                25,
                -23,
                26,
                -23,
                27,
                -23,
                37,
                -23,
                39,
                -23,
                40,
                -23,
                41,
                -23,
                42,
                -23,
                43,
                -23,
                44,
                -23,
                1,
                2,
                0,
                40,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                14,
                14,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                42,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                14,
                91,
                17,
                100,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                46,
                2,
                -11,
                3,
                -11,
                4,
                -11,
                6,
                -11,
                8,
                -11,
                11,
                -11,
                14,
                -11,
                17,
                -11,
                21,
                -11,
                22,
                -11,
                23,
                -11,
                24,
                -11,
                25,
                -11,
                26,
                -11,
                27,
                -11,
                37,
                -11,
                39,
                -11,
                40,
                -11,
                41,
                -11,
                42,
                -11,
                43,
                -11,
                44,
                -11,
                1,
                2,
                0,
                6,
                15,
                -27,
                31,
                95,
                1,
                2,
                0,
                4,
                15,
                -25,
                1,
                2,
                0,
                4,
                15,
                104,
                1,
                2,
                0,
                38,
                4,
                -23,
                6,
                -23,
                8,
                -23,
                16,
                105,
                21,
                -23,
                22,
                -23,
                23,
                -23,
                24,
                -23,
                25,
                -23,
                26,
                -23,
                27,
                -23,
                37,
                -23,
                39,
                -23,
                40,
                -23,
                41,
                -23,
                42,
                -23,
                43,
                -23,
                44,
                -23,
                1,
                2,
                0,
                40,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                14,
                14,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                42,
                3,
                15,
                4,
                -24,
                6,
                -24,
                8,
                -24,
                14,
                91,
                17,
                107,
                21,
                -24,
                22,
                -24,
                23,
                -24,
                24,
                -24,
                25,
                -24,
                26,
                -24,
                27,
                -24,
                37,
                -24,
                39,
                -24,
                40,
                -24,
                41,
                -24,
                42,
                -24,
                43,
                -24,
                44,
                -24,
                1,
                2,
                0,
                46,
                2,
                -12,
                3,
                -12,
                4,
                -12,
                6,
                -12,
                8,
                -12,
                11,
                -12,
                14,
                -12,
                17,
                -12,
                21,
                -12,
                22,
                -12,
                23,
                -12,
                24,
                -12,
                25,
                -12,
                26,
                -12,
                27,
                -12,
                37,
                -12,
                39,
                -12,
                40,
                -12,
                41,
                -12,
                42,
                -12,
                43,
                -12,
                44,
                -12,
                1,
                2,
                0,
                40,
                4,
                23,
                8,
                35,
                11,
                -9,
                18,
                -9,
                19,
                -9,
                21,
                30,
                22,
                41,
                23,
                38,
                24,
                25,
                25,
                37,
                26,
                42,
                31,
                -9,
                37,
                43,
                39,
                24,
                40,
                31,
                41,
                40,
                42,
                27,
                43,
                29,
                44,
                39,
                1,
                2,
                0,
                6,
                20,
                110,
                37,
                47,
                1,
                2,
                0,
                10,
                11,
                -8,
                18,
                -8,
                19,
                -8,
                31,
                -8,
                1,
                2,
                0,
            }
        );

        /** Access to parse-action table. */
        public override short[][] action_table()
        {
            return _action_table;
        }

        /** <code>reduce_goto</code> table. */
        protected static readonly short[][] _reduce_table = unpackFromShorts(
            new short[]
            {
                0,
                108,
                0,
                4,
                6,
                4,
                1,
                1,
                0,
                4,
                3,
                6,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                4,
                4,
                12,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                5,
                15,
                15,
                17,
                18,
                16,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                4,
                14,
                102,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                6,
                5,
                92,
                15,
                17,
                1,
                1,
                0,
                4,
                19,
                19,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                14,
                7,
                35,
                8,
                27,
                9,
                33,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                14,
                7,
                88,
                8,
                27,
                9,
                33,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                10,
                9,
                49,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                10,
                9,
                87,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                13,
                59,
                16,
                63,
                17,
                64,
                1,
                1,
                0,
                4,
                12,
                44,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                10,
                9,
                43,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                4,
                20,
                52,
                1,
                1,
                0,
                14,
                7,
                50,
                8,
                27,
                9,
                33,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                12,
                8,
                48,
                9,
                33,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                10,
                9,
                49,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                13,
                59,
                16,
                76,
                17,
                64,
                1,
                1,
                0,
                8,
                13,
                59,
                16,
                72,
                17,
                64,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                6,
                13,
                65,
                17,
                66,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                13,
                59,
                16,
                74,
                17,
                64,
                1,
                1,
                0,
                6,
                13,
                65,
                17,
                66,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                6,
                13,
                65,
                17,
                66,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                6,
                13,
                65,
                17,
                66,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                4,
                14,
                95,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                5,
                15,
                15,
                17,
                18,
                98,
                1,
                1,
                0,
                6,
                5,
                92,
                15,
                17,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                4,
                14,
                101,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                8,
                5,
                15,
                15,
                17,
                18,
                105,
                1,
                1,
                0,
                6,
                5,
                92,
                15,
                17,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                14,
                7,
                108,
                8,
                27,
                9,
                33,
                10,
                32,
                11,
                25,
                17,
                31,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
                2,
                1,
                1,
                0,
            }
        );

        /** Access to <code>reduce_goto</code> table. */
        public override short[][] reduce_table()
        {
            return _reduce_table;
        }

        /** Instance of action encapsulation class. */
        protected CUPΔLexParseΔactions action_obj;

        /** Action encapsulation object initializer. */
        protected override void init_actions()
        {
            action_obj = new CUPΔLexParseΔactions(this);
        }

        /** Invoke a user supplied parse action. */
        public override java_cup.runtime.Symbol do_action(
            int act_num,
            java_cup.runtime.lr_parser parser,
            java_cup.Stack stack,
            int top
        )
        {
            /* call code in generated class */
            return action_obj.CUPΔLexParseΔdo_action(act_num, parser, stack, top);
        }

        /** Indicates start state. */
        public override int start_state()
        {
            return 0;
        }

        /** Indicates start production. */
        public override int start_production()
        {
            return 0;
        }

        /** <code>EOF</code> Symbol index. */
        public override int EOF_sym()
        {
            return 0;
        }

        /** <code>error</code> Symbol index. */
        public override int error_sym()
        {
            return 1;
        }

        /** User initialization code. */
        public override void user_init()
        {
#line 850 "LexParse.cup"

#line 850 "LexParse.cup"

            action_obj.scanner = this.scanner;
#line default

#line default
        }

#line 815 "LexParse.cup"

#line 815 "LexParse.cup"

        public LexScan scanner;

        public LexParse(LexScan scanner)
            : base(scanner)
        {
            this.scanner = scanner;
        }

        public CharClasses getCharClasses()
        {
            return action_obj.charClasses;
        }

        public EOFActions getEOFActions()
        {
            return action_obj.eofActions;
        }

        public override void report_error(String message, Object info)
        {
            if (info is java_cup.runtime.Symbol)
            {
                java_cup.runtime.Symbol s = (java_cup.runtime.Symbol)info;

                if (s.sym == sym.EOF)
                    Out.error(ErrorMessages.UNEXPECTED_EOF);
                else
                    Out.error(scanner.file, ErrorMessages.SYNTAX_ERROR, s.left, s.right);
            }
            else
                Out.error(ErrorMessages.UNKNOWN_SYNTAX);
        }

        public override void report_fatal_error(String message, Object info)
        {
            // report_error(message, info);
            throw new GeneratorException();
        }

#line default

#line default
    }

    /** Cup generated class to encapsulate user supplied action code.*/
    public class CUPΔLexParseΔactions
    {
#line 27 "LexParse.cup"

#line 27 "LexParse.cup"

        internal LexScan scanner;
        internal CharClasses charClasses = new CharClasses(127);
        internal RegExps regExps = new RegExps();
        internal Macros macros = new Macros();
        internal Integer stateNumber;
        internal Timer t = new Timer();
        internal EOFActions eofActions = new EOFActions();

        void fatalError(ErrorMessages message, int line, int col)
        {
            syntaxError(message, line, col);
            throw new GeneratorException();
        }

        void fatalError(ErrorMessages message)
        {
            fatalError(message, scanner.currentLine(), -1);
            throw new GeneratorException();
        }

        void syntaxError(ErrorMessages message)
        {
            Out.error(scanner.file, message, scanner.currentLine(), -1);
        }

        void syntaxError(ErrorMessages message, int line)
        {
            Out.error(scanner.file, message, line, -1);
        }

        void syntaxError(ErrorMessages message, int line, int col)
        {
            Out.error(scanner.file, message, line, col);
        }

        private static readonly char[] jletter_ranges = new char[]
        {
            '$',
            '$',
            'A',
            'Z',
            '_',
            '_',
            'a',
            'z',
            (char)162,
            (char)165,
            (char)170,
            (char)170,
            (char)181,
            (char)181,
            (char)186,
            (char)186,
            (char)192,
            (char)214,
            (char)216,
            (char)246,
            (char)248,
            (char)543,
            (char)546,
            (char)563,
            (char)592,
            (char)685,
            (char)688,
            (char)696,
            (char)699,
            (char)705,
            (char)720,
            (char)721,
            (char)736,
            (char)740,
            (char)750,
            (char)750,
            (char)890,
            (char)890,
            (char)902,
            (char)902,
            (char)904,
            (char)906,
            (char)908,
            (char)908,
            (char)910,
            (char)929,
            (char)931,
            (char)974,
            (char)976,
            (char)983,
            (char)986,
            (char)1011,
            (char)1024,
            (char)1153,
            (char)1164,
            (char)1220,
            (char)1223,
            (char)1224,
            (char)1227,
            (char)1228,
            (char)1232,
            (char)1269,
            (char)1272,
            (char)1273,
            (char)1329,
            (char)1366,
            (char)1369,
            (char)1369,
            (char)1377,
            (char)1415,
            (char)1488,
            (char)1514,
            (char)1520,
            (char)1522,
            (char)1569,
            (char)1594,
            (char)1600,
            (char)1610,
            (char)1649,
            (char)1747,
            (char)1749,
            (char)1749,
            (char)1765,
            (char)1766,
            (char)1786,
            (char)1788,
            (char)1808,
            (char)1808,
            (char)1810,
            (char)1836,
            (char)1920,
            (char)1957,
            (char)2309,
            (char)2361,
            (char)2365,
            (char)2365,
            (char)2384,
            (char)2384,
            (char)2392,
            (char)2401,
            (char)2437,
            (char)2444,
            (char)2447,
            (char)2448,
            (char)2451,
            (char)2472,
            (char)2474,
            (char)2480,
            (char)2482,
            (char)2482,
            (char)2486,
            (char)2489,
            (char)2524,
            (char)2525,
            (char)2527,
            (char)2529,
            (char)2544,
            (char)2547,
            (char)2565,
            (char)2570,
            (char)2575,
            (char)2576,
            (char)2579,
            (char)2600,
            (char)2602,
            (char)2608,
            (char)2610,
            (char)2611,
            (char)2613,
            (char)2614,
            (char)2616,
            (char)2617,
            (char)2649,
            (char)2652,
            (char)2654,
            (char)2654,
            (char)2674,
            (char)2676,
            (char)2693,
            (char)2699,
            (char)2701,
            (char)2701,
            (char)2703,
            (char)2705,
            (char)2707,
            (char)2728,
            (char)2730,
            (char)2736,
            (char)2738,
            (char)2739,
            (char)2741,
            (char)2745,
            (char)2749,
            (char)2749,
            (char)2768,
            (char)2768,
            (char)2784,
            (char)2784,
            (char)2821,
            (char)2828,
            (char)2831,
            (char)2832,
            (char)2835,
            (char)2856,
            (char)2858,
            (char)2864,
            (char)2866,
            (char)2867,
            (char)2870,
            (char)2873,
            (char)2877,
            (char)2877,
            (char)2908,
            (char)2909,
            (char)2911,
            (char)2913,
            (char)2949,
            (char)2954,
            (char)2958,
            (char)2960,
            (char)2962,
            (char)2965,
            (char)2969,
            (char)2970,
            (char)2972,
            (char)2972,
            (char)2974,
            (char)2975,
            (char)2979,
            (char)2980,
            (char)2984,
            (char)2986,
            (char)2990,
            (char)2997,
            (char)2999,
            (char)3001,
            (char)3077,
            (char)3084,
            (char)3086,
            (char)3088,
            (char)3090,
            (char)3112,
            (char)3114,
            (char)3123,
            (char)3125,
            (char)3129,
            (char)3168,
            (char)3169,
            (char)3205,
            (char)3212,
            (char)3214,
            (char)3216,
            (char)3218,
            (char)3240,
            (char)3242,
            (char)3251,
            (char)3253,
            (char)3257,
            (char)3294,
            (char)3294,
            (char)3296,
            (char)3297,
            (char)3333,
            (char)3340,
            (char)3342,
            (char)3344,
            (char)3346,
            (char)3368,
            (char)3370,
            (char)3385,
            (char)3424,
            (char)3425,
            (char)3461,
            (char)3478,
            (char)3482,
            (char)3505,
            (char)3507,
            (char)3515,
            (char)3517,
            (char)3517,
            (char)3520,
            (char)3526,
            (char)3585,
            (char)3632,
            (char)3634,
            (char)3635,
            (char)3647,
            (char)3654,
            (char)3713,
            (char)3714,
            (char)3716,
            (char)3716,
            (char)3719,
            (char)3720,
            (char)3722,
            (char)3722,
            (char)3725,
            (char)3725,
            (char)3732,
            (char)3735,
            (char)3737,
            (char)3743,
            (char)3745,
            (char)3747,
            (char)3749,
            (char)3749,
            (char)3751,
            (char)3751,
            (char)3754,
            (char)3755,
            (char)3757,
            (char)3760,
            (char)3762,
            (char)3763,
            (char)3773,
            (char)3773,
            (char)3776,
            (char)3780,
            (char)3782,
            (char)3782,
            (char)3804,
            (char)3805,
            (char)3840,
            (char)3840,
            (char)3904,
            (char)3911,
            (char)3913,
            (char)3946,
            (char)3976,
            (char)3979,
            (char)4096,
            (char)4129,
            (char)4131,
            (char)4135,
            (char)4137,
            (char)4138,
            (char)4176,
            (char)4181,
            (char)4256,
            (char)4293,
            (char)4304,
            (char)4342,
            (char)4352,
            (char)4441,
            (char)4447,
            (char)4514,
            (char)4520,
            (char)4601,
            (char)4608,
            (char)4614,
            (char)4616,
            (char)4678,
            (char)4680,
            (char)4680,
            (char)4682,
            (char)4685,
            (char)4688,
            (char)4694,
            (char)4696,
            (char)4696,
            (char)4698,
            (char)4701,
            (char)4704,
            (char)4742,
            (char)4744,
            (char)4744,
            (char)4746,
            (char)4749,
            (char)4752,
            (char)4782,
            (char)4784,
            (char)4784,
            (char)4786,
            (char)4789,
            (char)4792,
            (char)4798,
            (char)4800,
            (char)4800,
            (char)4802,
            (char)4805,
            (char)4808,
            (char)4814,
            (char)4816,
            (char)4822,
            (char)4824,
            (char)4846,
            (char)4848,
            (char)4878,
            (char)4880,
            (char)4880,
            (char)4882,
            (char)4885,
            (char)4888,
            (char)4894,
            (char)4896,
            (char)4934,
            (char)4936,
            (char)4954,
            (char)5024,
            (char)5108,
            (char)5121,
            (char)5740,
            (char)5743,
            (char)5750,
            (char)5761,
            (char)5786,
            (char)5792,
            (char)5866,
            (char)6016,
            (char)6067,
            (char)6176,
            (char)6263,
            (char)6272,
            (char)6312,
            (char)7680,
            (char)7835,
            (char)7840,
            (char)7929,
            (char)7936,
            (char)7957,
            (char)7960,
            (char)7965,
            (char)7968,
            (char)8005,
            (char)8008,
            (char)8013,
            (char)8016,
            (char)8023,
            (char)8025,
            (char)8025,
            (char)8027,
            (char)8027,
            (char)8029,
            (char)8029,
            (char)8031,
            (char)8061,
            (char)8064,
            (char)8116,
            (char)8118,
            (char)8124,
            (char)8126,
            (char)8126,
            (char)8130,
            (char)8132,
            (char)8134,
            (char)8140,
            (char)8144,
            (char)8147,
            (char)8150,
            (char)8155,
            (char)8160,
            (char)8172,
            (char)8178,
            (char)8180,
            (char)8182,
            (char)8188,
            (char)8255,
            (char)8256,
            (char)8319,
            (char)8319,
            (char)8352,
            (char)8363,
            (char)8450,
            (char)8450,
            (char)8455,
            (char)8455,
            (char)8458,
            (char)8467,
            (char)8469,
            (char)8469,
            (char)8473,
            (char)8477,
            (char)8484,
            (char)8484,
            (char)8486,
            (char)8486,
            (char)8488,
            (char)8488,
            (char)8490,
            (char)8493,
            (char)8495,
            (char)8497,
            (char)8499,
            (char)8505,
            (char)12293,
            (char)12294,
            (char)12337,
            (char)12341,
            (char)12353,
            (char)12436,
            (char)12445,
            (char)12446,
            (char)12449,
            (char)12538,
            (char)12540,
            (char)12542,
            (char)12549,
            (char)12588,
            (char)12593,
            (char)12686,
            (char)12704,
            (char)12727,
            (char)13312,
            (char)19893,
            (char)19968,
            (char)40869,
            (char)40960,
            (char)42124,
            (char)44032,
            (char)55203,
            (char)63744,
            (char)64045,
            (char)64256,
            (char)64262,
            (char)64275,
            (char)64279,
            (char)64285,
            (char)64285,
            (char)64287,
            (char)64296,
            (char)64298,
            (char)64310,
            (char)64312,
            (char)64316,
            (char)64318,
            (char)64318,
            (char)64320,
            (char)64321,
            (char)64323,
            (char)64324,
            (char)64326,
            (char)64433,
            (char)64467,
            (char)64829,
            (char)64848,
            (char)64911,
            (char)64914,
            (char)64967,
            (char)65008,
            (char)65019,
            (char)65075,
            (char)65076,
            (char)65101,
            (char)65103,
            (char)65129,
            (char)65129,
            (char)65136,
            (char)65138,
            (char)65140,
            (char)65140,
            (char)65142,
            (char)65276,
            (char)65284,
            (char)65284,
            (char)65313,
            (char)65338,
            (char)65343,
            (char)65343,
            (char)65345,
            (char)65370,
            (char)65382,
            (char)65470,
            (char)65474,
            (char)65479,
            (char)65482,
            (char)65487,
            (char)65490,
            (char)65495,
            (char)65498,
            (char)65500,
            (char)65504,
            (char)65505,
            (char)65509,
            (char)65510,
        };

        private static readonly char[] jletterdigit_ranges = new char[]
        {
            (char)0,
            (char)8,
            (char)14,
            (char)27,
            '$',
            '$',
            '0',
            '9',
            'A',
            'Z',
            '_',
            '_',
            'a',
            'z',
            (char)127,
            (char)159,
            (char)162,
            (char)165,
            (char)170,
            (char)170,
            (char)178,
            (char)179,
            (char)181,
            (char)181,
            (char)185,
            (char)186,
            (char)192,
            (char)214,
            (char)216,
            (char)246,
            (char)248,
            (char)543,
            (char)546,
            (char)563,
            (char)592,
            (char)685,
            (char)688,
            (char)696,
            (char)699,
            (char)705,
            (char)720,
            (char)721,
            (char)736,
            (char)740,
            (char)750,
            (char)750,
            (char)768,
            (char)837,
            (char)864,
            (char)865,
            (char)890,
            (char)890,
            (char)902,
            (char)902,
            (char)904,
            (char)906,
            (char)908,
            (char)908,
            (char)910,
            (char)929,
            (char)931,
            (char)974,
            (char)976,
            (char)983,
            (char)986,
            (char)1011,
            (char)1024,
            (char)1153,
            (char)1155,
            (char)1158,
            (char)1164,
            (char)1220,
            (char)1223,
            (char)1224,
            (char)1227,
            (char)1228,
            (char)1232,
            (char)1269,
            (char)1272,
            (char)1273,
            (char)1329,
            (char)1366,
            (char)1369,
            (char)1369,
            (char)1377,
            (char)1415,
            (char)1425,
            (char)1465,
            (char)1467,
            (char)1469,
            (char)1471,
            (char)1471,
            (char)1473,
            (char)1474,
            (char)1476,
            (char)1476,
            (char)1488,
            (char)1514,
            (char)1520,
            (char)1522,
            (char)1569,
            (char)1594,
            (char)1600,
            (char)1618,
            (char)1632,
            (char)1641,
            (char)1648,
            (char)1747,
            (char)1749,
            (char)1756,
            (char)1759,
            (char)1768,
            (char)1770,
            (char)1773,
            (char)1776,
            (char)1788,
            (char)1808,
            (char)1808,
            (char)1810,
            (char)1836,
            (char)1920,
            (char)1957,
            (char)2305,
            (char)2307,
            (char)2309,
            (char)2361,
            (char)2364,
            (char)2381,
            (char)2384,
            (char)2388,
            (char)2392,
            (char)2403,
            (char)2406,
            (char)2415,
            (char)2433,
            (char)2435,
            (char)2437,
            (char)2444,
            (char)2447,
            (char)2448,
            (char)2451,
            (char)2472,
            (char)2474,
            (char)2480,
            (char)2482,
            (char)2482,
            (char)2486,
            (char)2489,
            (char)2492,
            (char)2492,
            (char)2494,
            (char)2500,
            (char)2503,
            (char)2504,
            (char)2507,
            (char)2509,
            (char)2519,
            (char)2519,
            (char)2524,
            (char)2525,
            (char)2527,
            (char)2531,
            (char)2534,
            (char)2551,
            (char)2553,
            (char)2553,
            (char)2562,
            (char)2562,
            (char)2565,
            (char)2570,
            (char)2575,
            (char)2576,
            (char)2579,
            (char)2600,
            (char)2602,
            (char)2608,
            (char)2610,
            (char)2611,
            (char)2613,
            (char)2614,
            (char)2616,
            (char)2617,
            (char)2620,
            (char)2620,
            (char)2622,
            (char)2626,
            (char)2631,
            (char)2632,
            (char)2635,
            (char)2637,
            (char)2649,
            (char)2652,
            (char)2654,
            (char)2654,
            (char)2662,
            (char)2676,
            (char)2689,
            (char)2691,
            (char)2693,
            (char)2699,
            (char)2701,
            (char)2701,
            (char)2703,
            (char)2705,
            (char)2707,
            (char)2728,
            (char)2730,
            (char)2736,
            (char)2738,
            (char)2739,
            (char)2741,
            (char)2745,
            (char)2748,
            (char)2757,
            (char)2759,
            (char)2761,
            (char)2763,
            (char)2765,
            (char)2768,
            (char)2768,
            (char)2784,
            (char)2784,
            (char)2790,
            (char)2799,
            (char)2817,
            (char)2819,
            (char)2821,
            (char)2828,
            (char)2831,
            (char)2832,
            (char)2835,
            (char)2856,
            (char)2858,
            (char)2864,
            (char)2866,
            (char)2867,
            (char)2870,
            (char)2873,
            (char)2876,
            (char)2883,
            (char)2887,
            (char)2893,
            (char)2902,
            (char)2903,
            (char)2908,
            (char)2909,
            (char)2911,
            (char)2913,
            (char)2918,
            (char)2927,
            (char)2946,
            (char)2947,
            (char)2949,
            (char)2954,
            (char)2958,
            (char)2960,
            (char)2962,
            (char)2965,
            (char)2969,
            (char)2970,
            (char)2972,
            (char)2972,
            (char)2974,
            (char)2975,
            (char)2979,
            (char)2980,
            (char)2984,
            (char)2986,
            (char)2990,
            (char)2997,
            (char)2999,
            (char)3001,
            (char)3006,
            (char)3140,
            (char)3142,
            (char)3144,
            (char)3146,
            (char)3149,
            (char)3157,
            (char)3158,
            (char)3168,
            (char)3169,
            (char)3174,
            (char)3183,
            (char)3202,
            (char)3203,
            (char)3205,
            (char)3212,
            (char)3214,
            (char)3216,
            (char)3218,
            (char)3240,
            (char)3242,
            (char)3251,
            (char)3253,
            (char)3257,
            (char)3262,
            (char)3268,
            (char)3270,
            (char)3272,
            (char)3274,
            (char)3277,
            (char)3285,
            (char)3286,
            (char)3294,
            (char)3294,
            (char)3296,
            (char)3297,
            (char)3302,
            (char)3311,
            (char)3330,
            (char)3331,
            (char)3333,
            (char)3340,
            (char)3342,
            (char)3344,
            (char)3346,
            (char)3368,
            (char)3370,
            (char)3385,
            (char)3390,
            (char)3395,
            (char)3398,
            (char)3400,
            (char)3402,
            (char)3405,
            (char)3415,
            (char)3415,
            (char)3424,
            (char)3425,
            (char)3430,
            (char)3439,
            (char)3461,
            (char)3478,
            (char)3482,
            (char)3505,
            (char)3507,
            (char)3515,
            (char)3517,
            (char)3517,
            (char)3520,
            (char)3526,
            (char)3585,
            (char)3642,
            (char)3647,
            (char)3662,
            (char)3664,
            (char)3673,
            (char)3713,
            (char)3714,
            (char)3716,
            (char)3716,
            (char)3719,
            (char)3720,
            (char)3722,
            (char)3722,
            (char)3725,
            (char)3725,
            (char)3732,
            (char)3735,
            (char)3737,
            (char)3743,
            (char)3745,
            (char)3747,
            (char)3749,
            (char)3749,
            (char)3751,
            (char)3751,
            (char)3754,
            (char)3755,
            (char)3757,
            (char)3769,
            (char)3771,
            (char)3773,
            (char)3776,
            (char)3780,
            (char)3782,
            (char)3782,
            (char)3784,
            (char)3789,
            (char)3792,
            (char)3801,
            (char)3804,
            (char)3805,
            (char)3840,
            (char)3840,
            (char)3864,
            (char)3865,
            (char)3872,
            (char)3881,
            (char)3893,
            (char)3893,
            (char)3895,
            (char)3895,
            (char)3897,
            (char)3897,
            (char)3902,
            (char)3911,
            (char)3913,
            (char)3946,
            (char)3953,
            (char)3979,
            (char)3984,
            (char)3989,
            (char)3991,
            (char)3991,
            (char)3993,
            (char)4013,
            (char)4017,
            (char)4023,
            (char)4025,
            (char)4025,
            (char)4096,
            (char)4129,
            (char)4131,
            (char)4135,
            (char)4137,
            (char)4138,
            (char)4176,
            (char)4181,
            (char)4256,
            (char)4293,
            (char)4304,
            (char)4342,
            (char)4352,
            (char)4441,
            (char)4447,
            (char)4514,
            (char)4520,
            (char)4601,
            (char)4608,
            (char)4614,
            (char)4616,
            (char)4678,
            (char)4680,
            (char)4680,
            (char)4682,
            (char)4685,
            (char)4688,
            (char)4694,
            (char)4696,
            (char)4696,
            (char)4698,
            (char)4701,
            (char)4704,
            (char)4742,
            (char)4744,
            (char)4744,
            (char)4746,
            (char)4749,
            (char)4752,
            (char)4782,
            (char)4784,
            (char)4784,
            (char)4786,
            (char)4789,
            (char)4792,
            (char)4798,
            (char)4800,
            (char)4800,
            (char)4802,
            (char)4805,
            (char)4808,
            (char)4814,
            (char)4816,
            (char)4822,
            (char)4824,
            (char)4846,
            (char)4848,
            (char)4878,
            (char)4880,
            (char)4880,
            (char)4882,
            (char)4885,
            (char)4888,
            (char)4894,
            (char)4896,
            (char)4934,
            (char)4936,
            (char)4954,
            (char)5024,
            (char)5108,
            (char)5121,
            (char)5740,
            (char)5743,
            (char)5750,
            (char)5761,
            (char)5786,
            (char)5792,
            (char)5866,
            (char)6016,
            (char)6067,
            (char)6176,
            (char)6263,
            (char)6272,
            (char)6312,
            (char)7680,
            (char)7835,
            (char)7840,
            (char)7929,
            (char)7936,
            (char)7957,
            (char)7960,
            (char)7965,
            (char)7968,
            (char)8005,
            (char)8008,
            (char)8013,
            (char)8016,
            (char)8023,
            (char)8025,
            (char)8025,
            (char)8027,
            (char)8027,
            (char)8029,
            (char)8029,
            (char)8031,
            (char)8061,
            (char)8064,
            (char)8116,
            (char)8118,
            (char)8124,
            (char)8126,
            (char)8126,
            (char)8130,
            (char)8132,
            (char)8134,
            (char)8140,
            (char)8144,
            (char)8147,
            (char)8150,
            (char)8155,
            (char)8160,
            (char)8172,
            (char)8178,
            (char)8180,
            (char)8182,
            (char)8188,
            (char)8204,
            (char)8207,
            (char)8234,
            (char)8238,
            (char)8255,
            (char)8256,
            (char)8298,
            (char)8304,
            (char)8308,
            (char)8313,
            (char)8319,
            (char)8329,
            (char)8352,
            (char)8363,
            (char)8400,
            (char)8412,
            (char)8417,
            (char)8417,
            (char)8450,
            (char)8450,
            (char)8455,
            (char)8455,
            (char)8458,
            (char)8467,
            (char)8469,
            (char)8469,
            (char)8473,
            (char)8477,
            (char)8484,
            (char)8484,
            (char)8486,
            (char)8486,
            (char)8488,
            (char)8488,
            (char)8490,
            (char)8493,
            (char)8495,
            (char)8497,
            (char)8499,
            (char)8505,
            (char)8543,
            (char)8578,
            (char)9312,
            (char)9371,
            (char)9450,
            (char)9450,
            (char)10102,
            (char)10131,
            (char)12293,
            (char)12295,
            (char)12321,
            (char)12335,
            (char)12337,
            (char)12341,
            (char)12353,
            (char)12436,
            (char)12441,
            (char)12442,
            (char)12445,
            (char)12446,
            (char)12449,
            (char)12538,
            (char)12540,
            (char)12542,
            (char)12549,
            (char)12588,
            (char)12593,
            (char)12686,
            (char)12704,
            (char)12727,
            (char)12928,
            (char)12937,
            (char)13312,
            (char)19893,
            (char)19968,
            (char)40869,
            (char)40960,
            (char)42124,
            (char)44032,
            (char)55203,
            (char)63744,
            (char)64045,
            (char)64256,
            (char)64262,
            (char)64275,
            (char)64279,
            (char)64285,
            (char)64285,
            (char)64287,
            (char)64296,
            (char)64298,
            (char)64310,
            (char)64312,
            (char)64316,
            (char)64318,
            (char)64318,
            (char)64320,
            (char)64321,
            (char)64323,
            (char)64324,
            (char)64326,
            (char)64433,
            (char)64467,
            (char)64829,
            (char)64848,
            (char)64911,
            (char)64914,
            (char)64967,
            (char)65008,
            (char)65019,
            (char)65075,
            (char)65076,
            (char)65101,
            (char)65103,
            (char)65129,
            (char)65129,
            (char)65136,
            (char)65138,
            (char)65140,
            (char)65140,
            (char)65142,
            (char)65276,
            (char)65279,
            (char)65279,
            (char)65284,
            (char)65284,
            (char)65296,
            (char)65305,
            (char)65313,
            (char)65338,
            (char)65343,
            (char)65343,
            (char)65345,
            (char)65370,
            (char)65382,
            (char)65470,
            (char)65474,
            (char)65479,
            (char)65482,
            (char)65487,
            (char)65490,
            (char)65495,
            (char)65498,
            (char)65500,
            (char)65504,
            (char)65505,
            (char)65509,
            (char)65510,
        };

        private static bool[] jletter_map,
            jletterdigit_map;

        private bool check(int type, char c)
        {
            switch (type)
            {
                case sym.JLETTERCLASS:
                    if (jletter_map == null)
                    {
                        jletter_map = new bool[65536];
                        for (int i = 0; i < jletter_ranges.Length; i += 2)
                        for (char j = jletter_ranges[i]; j <= jletter_ranges[i + 1]; j++)
                            jletter_map[(int)j] = true;
                    }
                    return jletter_map[(int)c];

                case sym.JLETTERDIGITCLASS:
                    if (jletterdigit_map == null)
                    {
                        jletterdigit_map = new bool[65536];
                        for (int i = 0; i < jletterdigit_ranges.Length; i += 2)
                        for (char j = jletterdigit_ranges[i]; j <= jletterdigit_ranges[i + 1]; j++)
                            jletterdigit_map[(int)j] = true;
                    }
                    return jletterdigit_map[(int)c];

                case sym.LETTERCLASS:
                    return char.IsLetter(c);

                case sym.DIGITCLASS:
                    return char.IsDigit(c);

                case sym.UPPERCLASS:
                    return char.IsUpper(c);

                case sym.LOWERCLASS:
                    return char.IsLower(c);

                default:
                    return false;
            }
        }

        private ArrayList makePreClass(int type)
        {
            ArrayList result = new PrettyArrayList();

            char c = (char)0;
            char start = (char)0;
            char last = charClasses.getMaxCharCode();

            bool prev,
                current;

            prev = check(type, '\u0000');

            for (c = (char)1; c < last; c++)
            {
                current = check(type, c);

                if (!prev && current)
                    start = c;
                if (prev && !current)
                {
                    result.Add(new Interval(start, (char)(c - 1)));
                }

                prev = current;
            }

            // the last iteration is moved out of the loop to
            // avoid an endless loop if last == maxCharCode and
            // last+1 == 0
            current = check(type, c);

            if (!prev && current)
                result.Add(new Interval(c, c));
            if (prev && current)
                result.Add(new Interval(start, c));
            if (prev && !current)
                result.Add(new Interval(start, (char)(c - 1)));

            return result;
        }

        private RegExp makeRepeat(RegExp r, int n1, int n2, int line, int col)
        {
            if (n1 <= 0 && n2 <= 0)
            {
                syntaxError(ErrorMessages.REPEAT_ZERO, line, col);
                return null;
            }

            if (n1 > n2)
            {
                syntaxError(ErrorMessages.REPEAT_GREATER, line, col);
                return null;
            }

            int i;
            RegExp result;

            if (n1 > 0)
            {
                result = r;
                n1--;
                n2--; // we need one concatenation less than the number of expressions to match
            }
            else
            {
                result = new RegExp1(sym.QUESTION, r);
                n2--;
            }

            for (i = 0; i < n1; i++)
                result = new RegExp2(sym.CONCAT, result, r);

            n2 -= n1;
            for (i = 0; i < n2; i++)
                result = new RegExp2(sym.CONCAT, result, new RegExp1(sym.QUESTION, r));

            return result;
        }

        private RegExp makeNL()
        {
            ArrayList list = new PrettyArrayList();
            list.Add(new Interval('\n', '\r'));
            list.Add(new Interval('\u0085', '\u0085'));
            list.Add(new Interval('\u2028', '\u2029'));

            // assumption: line feeds are caseless
            charClasses.makeClass(list, false);
            charClasses.makeClass('\n', false);
            charClasses.makeClass('\r', false);

            RegExp1 c = new RegExp1(sym.CCLASS, list);
            char n = '\n';
            char r = '\r';

            return new RegExp2(
                sym.BAR,
                c,
                new RegExp2(sym.CONCAT, new RegExp1(sym.CHAR, r), new RegExp1(sym.CHAR, n))
            );
        }

#line default

#line default
        private readonly LexParse parser;

        /** Constructor */
        internal CUPΔLexParseΔactions(LexParse parser)
        {
            this.parser = parser;
        }

        /** Method with the actual generated action code. */
        public java_cup.runtime.Symbol CUPΔLexParseΔdo_action(
            int CUPΔLexParseΔact_num,
            java_cup.runtime.lr_parser CUPΔLexParseΔparser,
            java_cup.Stack CUPΔLexParseΔstack,
            int CUPΔLexParseΔtop
        )
        {
            /* Symbol object for return from actions */
            java_cup.runtime.Symbol CUPΔLexParseΔresult;

            /* select the action based on the action number */
            switch (CUPΔLexParseΔact_num)
            {
                /*. . . . . . . . . . . . . . . . . . . .*/
                case 72: // preclass ::= LOWERCLASS
                    {
                        ArrayList RESULT = null;

#line 1317 "LexParse.cup"
                        RESULT = makePreClass(sym.LOWERCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 71: // preclass ::= UPPERCLASS
                    {
                        ArrayList RESULT = null;

#line 1315 "LexParse.cup"
                        RESULT = makePreClass(sym.UPPERCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 70: // preclass ::= DIGITCLASS
                    {
                        ArrayList RESULT = null;

#line 1313 "LexParse.cup"
                        RESULT = makePreClass(sym.DIGITCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 69: // preclass ::= LETTERCLASS
                    {
                        ArrayList RESULT = null;

#line 1311 "LexParse.cup"
                        RESULT = makePreClass(sym.LETTERCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 68: // preclass ::= JLETTERDIGITCLASS
                    {
                        ArrayList RESULT = null;

#line 1309 "LexParse.cup"
                        RESULT = makePreClass(sym.JLETTERDIGITCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 67: // preclass ::= JLETTERCLASS
                    {
                        ArrayList RESULT = null;

#line 1307 "LexParse.cup"
                        RESULT = makePreClass(sym.JLETTERCLASS);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            15 /*preclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 66: // classcontentelem ::= CHAR
                    {
                        Interval RESULT = null;
                        int cleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int cright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        char c = (char)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1303 "LexParse.cup"
                        RESULT = new Interval(c, c);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            11 /*classcontentelem*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 65: // classcontentelem ::= CHAR DASH CHAR
                    {
                        Interval RESULT = null;
                        int c1left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int c1right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        char c1 = (char)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int c2left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int c2right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        char c2 = (char)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1301 "LexParse.cup"
                        RESULT = new Interval(c1, c2);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            11 /*classcontentelem*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 64: // classcontent ::= MACROUSE
                    {
                        ArrayList RESULT = null;
                        int identleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int identright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String ident = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1295 "LexParse.cup"

                        syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 63: // classcontent ::= classcontent MACROUSE
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int identleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int identright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String ident = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1291 "LexParse.cup"

                        syntaxError(ErrorMessages.CHARCLASS_MACRO, identleft, identright);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 62: // classcontent ::= STRING
                    {
                        ArrayList RESULT = null;
                        int sleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int sright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String s = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1285 "LexParse.cup"

                        RESULT = new PrettyArrayList();
                        for (int i = 0; i < s.Length; i++)
                            RESULT.Add(new Interval(s[i], s[i]));

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 61: // classcontent ::= classcontent STRING
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int sleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int sright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String s = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1279 "LexParse.cup"

                        for (int i = 0; i < s.Length; i++)
                            list.Add(new Interval(s[i], s[i]));
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 60: // classcontent ::= preclass
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1277 "LexParse.cup"
                        RESULT = list;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 59: // classcontent ::= classcontent preclass
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int plistleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int plistright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        ArrayList plist = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1271 "LexParse.cup"

                        for (IEnumerator e = plist.GetEnumerator(); e.MoveNext(); )
                            list.Add(e.Current);
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 58: // classcontent ::= classcontentelem
                    {
                        ArrayList RESULT = null;
                        int elemleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int elemright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Interval elem = (Interval)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1265 "LexParse.cup"

                        ArrayList list = new PrettyArrayList();
                        list.Add(elem);
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 57: // classcontent ::= classcontent classcontentelem
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int elemleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int elemright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Interval elem = (Interval)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1260 "LexParse.cup"

                        list.Add(elem);
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            14 /*classcontent*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 56: // charclass ::= OPENCLASS HAT DASH classcontent CLOSECLASS
                    {
                        RegExp RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int closeleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int closeright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object close = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1247 "LexParse.cup"

                        try
                        {
                            list.Add(new Interval('-', '-'));
                            charClasses.makeClassNot(list, Options.jlex && scanner.caseless);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                        }
                        RESULT = new RegExp1(sym.CCLASSNOT, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 55: // charclass ::= OPENCLASS DASH classcontent CLOSECLASS
                    {
                        RegExp RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int closeleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int closeright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object close = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1236 "LexParse.cup"

                        try
                        {
                            list.Add(new Interval('-', '-'));
                            charClasses.makeClass(list, Options.jlex && scanner.caseless);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                        }
                        RESULT = new RegExp1(sym.CCLASS, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 54: // charclass ::= OPENCLASS HAT classcontent CLOSECLASS
                    {
                        RegExp RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int closeleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int closeright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object close = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1226 "LexParse.cup"

                        try
                        {
                            charClasses.makeClassNot(list, Options.jlex && scanner.caseless);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                        }
                        RESULT = new RegExp1(sym.CCLASSNOT, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 53: // charclass ::= OPENCLASS HAT CLOSECLASS
                    {
                        RegExp RESULT = null;
                        int closeleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int closeright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object close = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1214 "LexParse.cup"

                        ArrayList list = new PrettyArrayList();
                        list.Add(new Interval((char)0, CharClasses.maxChar));
                        try
                        {
                            charClasses.makeClass(list, false);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                        }
                        RESULT = new RegExp1(sym.CCLASS, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 52: // charclass ::= OPENCLASS classcontent CLOSECLASS
                    {
                        RegExp RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int closeleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int closeright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object close = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1204 "LexParse.cup"

                        try
                        {
                            charClasses.makeClass(list, Options.jlex && scanner.caseless);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, closeleft, closeright);
                        }
                        RESULT = new RegExp1(sym.CCLASS, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 51: // charclass ::= OPENCLASS CLOSECLASS
                    {
                        RegExp RESULT = null;

#line 1200 "LexParse.cup"

                        RESULT = new RegExp1(sym.CCLASS, null);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            9 /*charclass*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 50: // regexp ::= CHAR
                    {
                        RegExp RESULT = null;
                        int cleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int cright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        char c = (char)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1182 "LexParse.cup"

                        try
                        {
                            if (scanner.caseless)
                            {
                                charClasses.makeClass(c, true);
                                RESULT = new RegExp1(sym.CHAR_I, c);
                            }
                            else
                            {
                                charClasses.makeClass(c, false);
                                RESULT = new RegExp1(sym.CHAR, c);
                            }
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CS2SMALL_CHAR, cleft, cright);
                        }

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 49: // regexp ::= POINT
                    {
                        RegExp RESULT = null;

#line 1174 "LexParse.cup"

                        ArrayList any = new PrettyArrayList();
                        any.Add(new Interval('\n', '\n'));
                        // assumption: there is no upper case for \n
                        charClasses.makeClass('\n', false);
                        RESULT = new RegExp1(sym.CCLASSNOT, any);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 48: // regexp ::= STRING
                    {
                        RegExp RESULT = null;
                        int strleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int strright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String str = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1157 "LexParse.cup"

                        try
                        {
                            if (scanner.caseless)
                            {
                                charClasses.makeClass(str, true);
                                RESULT = new RegExp1(sym.STRING_I, str);
                            }
                            else
                            {
                                charClasses.makeClass(str, false);
                                RESULT = new RegExp1(sym.STRING, str);
                            }
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CS2SMALL_STRING, strleft, strright);
                        }

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 47: // regexp ::= preclass
                    {
                        RegExp RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1146 "LexParse.cup"

                        try
                        {
                            // assumption [correct?]: preclasses are already closed under case
                            charClasses.makeClass(list, false);
                        }
                        catch (CharClassException)
                        {
                            syntaxError(ErrorMessages.CHARSET_2_SMALL, listleft);
                        }
                        RESULT = new RegExp1(sym.CCLASS, list);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 46: // regexp ::= charclass
                    {
                        RegExp RESULT = null;
                        int cleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int cright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp c = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1144 "LexParse.cup"
                        RESULT = c;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 45: // regexp ::= MACROUSE
                    {
                        RegExp RESULT = null;
                        int identleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int identright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String ident = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1135 "LexParse.cup"

                        if (!scanner.macroDefinition)
                        {
                            if (!macros.markUsed(ident))
                                throw new ScannerException(
                                    scanner.file,
                                    ErrorMessages.MACRO_UNDECL,
                                    identleft,
                                    identright
                                );
                        }
                        RESULT = new RegExp1(sym.MACROUSE, ident);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 44: // regexp ::= OPENBRACKET series CLOSEBRACKET
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1133 "LexParse.cup"
                        RESULT = r;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 43: // regexp ::= regexp REPEAT REPEAT RBRACE
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).value;
                        int n1left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int n1right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        int n1 = (int)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int n2left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int n2right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        int n2 = (int)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1131 "LexParse.cup"
                        RESULT = makeRepeat(r, n1, n2, n1left, n2right);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 42: // regexp ::= regexp REPEAT RBRACE
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int nleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int nright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        int n = (int)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int bleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int bright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object b = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1129 "LexParse.cup"
                        RESULT = makeRepeat(r, n, n, bleft, bright);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 41: // regexp ::= regexp QUESTION
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1127 "LexParse.cup"
                        RESULT = new RegExp1(sym.QUESTION, r);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 40: // regexp ::= regexp PLUS
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1125 "LexParse.cup"
                        RESULT = new RegExp1(sym.PLUS, r);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 39: // regexp ::= regexp STAR
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1123 "LexParse.cup"
                        RESULT = new RegExp1(sym.STAR, r);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            8 /*regexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 38: // nregexp ::= TILDE nregexp
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1119 "LexParse.cup"
                        RESULT = new RegExp1(sym.TILDE, r);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            7 /*nregexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 37: // nregexp ::= BANG nregexp
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1117 "LexParse.cup"
                        RESULT = new RegExp1(sym.BANG, r);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            7 /*nregexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 36: // nregexp ::= regexp
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1115 "LexParse.cup"
                        RESULT = r;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            7 /*nregexp*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 35: // concs ::= nregexp
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1111 "LexParse.cup"
                        RESULT = r;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            6 /*concs*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 34: // concs ::= concs nregexp
                    {
                        RegExp RESULT = null;
                        int r1left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int r1right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp r1 = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int r2left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int r2right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r2 = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1109 "LexParse.cup"
                        RESULT = new RegExp2(sym.CONCAT, r1, r2);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            6 /*concs*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 33: // series ::= BAR
                    {
                        RegExp RESULT = null;
                        int bleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int bright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object b = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1105 "LexParse.cup"
                        syntaxError(ErrorMessages.REGEXP_EXPECTED, bleft, bright);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            5 /*series*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 32: // series ::= concs
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1103 "LexParse.cup"
                        RESULT = r;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            5 /*series*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 31: // series ::= series BAR concs
                    {
                        RegExp RESULT = null;
                        int r1left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int r1right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        RegExp r1 = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int r2left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int r2right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r2 = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1101 "LexParse.cup"
                        RESULT = new RegExp2(sym.BAR, r1, r2);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            5 /*series*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 30: // hatOPT ::=
                    {
                        Boolean RESULT = null;

#line 1097 "LexParse.cup"
                        RESULT = new Boolean(false);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            17 /*hatOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 29: // hatOPT ::= HAT
                    {
                        Boolean RESULT = null;

#line 1093 "LexParse.cup"
                        // assumption: there is no upper case for \n
                        charClasses.makeClass('\n', false);
                        RESULT = new Boolean(true);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            17 /*hatOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 28: // states ::= IDENT COMMA
                    {
                        ArrayList RESULT = null;
                        int cleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int cright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object c = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1089 "LexParse.cup"
                        syntaxError(ErrorMessages.REGEXP_EXPECTED, cleft, cright + 1);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            12 /*states*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 27: // states ::= IDENT
                    {
                        ArrayList RESULT = null;
                        int idleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int idright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        String id = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1077 "LexParse.cup"

                        ArrayList list = new PrettyArrayList();
                        stateNumber = scanner.states.getNumber(id);
                        if (stateNumber != null)
                            list.Add(stateNumber.intValue());
                        else
                        {
                            throw new ScannerException(
                                scanner.file,
                                ErrorMessages.LEXSTATE_UNDECL,
                                idleft,
                                idright
                            );
                        }
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            12 /*states*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 26: // states ::= IDENT COMMA states
                    {
                        ArrayList RESULT = null;
                        int idleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int idright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        String id = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1066 "LexParse.cup"

                        stateNumber = scanner.states.getNumber(id);
                        if (stateNumber != null)
                            list.Add(stateNumber.intValue());
                        else
                        {
                            throw new ScannerException(
                                scanner.file,
                                ErrorMessages.LEXSTATE_UNDECL,
                                idleft,
                                idright
                            );
                        }
                        RESULT = list;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            12 /*states*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 25: // statesOPT ::=
                    {
                        ArrayList RESULT = null;

#line 1062 "LexParse.cup"
                        RESULT = new PrettyArrayList();
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            13 /*statesOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 24: // statesOPT ::= LESSTHAN states MORETHAN
                    {
                        ArrayList RESULT = null;
                        int listleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int listright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList list = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1060 "LexParse.cup"
                        RESULT = list;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            13 /*statesOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 23: // actions ::= NOACTION
                    {
                        Action RESULT = null;

#line 1055 "LexParse.cup"
                        RESULT = null;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            18 /*actions*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 22: // actions ::= REGEXPEND ACTION
                    {
                        Action RESULT = null;
                        int aleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int aright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Action a = (Action)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1053 "LexParse.cup"
                        RESULT = a;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            18 /*actions*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 21: // lookaheadOPT ::= LOOKAHEAD series DOLLAR
                    {
                        RegExp RESULT = null;
                        int sleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int sright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp s = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1049 "LexParse.cup"
                        RESULT = new RegExp2(sym.CONCAT, s, makeNL());
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            10 /*lookaheadOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 20: // lookaheadOPT ::=
                    {
                        RegExp RESULT = null;

#line 1047 "LexParse.cup"
                        RESULT = null;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            10 /*lookaheadOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 19: // lookaheadOPT ::= LOOKAHEAD series
                    {
                        RegExp RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1045 "LexParse.cup"
                        RESULT = r;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            10 /*lookaheadOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 18: // lookaheadOPT ::= DOLLAR
                    {
                        RegExp RESULT = null;

#line 1043 "LexParse.cup"
                        RESULT = makeNL();
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            10 /*lookaheadOPT*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 17: // rule ::= error
                    {
                        Integer RESULT = null;

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            3 /*rule*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 16: // rule ::= statesOPT EOFRULE ACTION
                    {
                        Integer RESULT = null;
                        int sleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int sright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        ArrayList s = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int aleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int aright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Action a = (Action)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1038 "LexParse.cup"
                        RESULT = new Integer(regExps.insert(s, a));
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            3 /*rule*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 15: // rule ::= statesOPT hatOPT series lookaheadOPT actions
                    {
                        Integer RESULT = null;
                        int sleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).left;
                        int sright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).right;
                        ArrayList s = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                            ).value;
                        int bolleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).left;
                        int bolright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).right;
                        Boolean bol = (Boolean)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).value;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                        ).right;
                        RegExp r = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 2)
                            ).value;
                        int lleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int lright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp l = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int aleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int aright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Action a = (Action)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1036 "LexParse.cup"
                        RESULT = new Integer(regExps.insert(rleft, s, r, a, bol, l));
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            3 /*rule*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 14: // rules ::= rule
                    {
                        ArrayList RESULT = null;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Integer r = (Integer)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1032 "LexParse.cup"
                        RESULT = new PrettyArrayList();
                        RESULT.Add(r.intValue());
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            16 /*rules*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 13: // rules ::= LESSTHAN states MORETHAN LBRACE rules RBRACE
                    {
                        ArrayList RESULT = null;
                        int statesleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).left;
                        int statesright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).right;
                        ArrayList states = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                            ).value;
                        int rlistleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rlistright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList rlist = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1023 "LexParse.cup"

                        IEnumerator rs = rlist.GetEnumerator();
                        while (rs.MoveNext())
                        {
                            int elem = (int)rs.Current;
                            regExps.addStates(elem, states);
                        }
                        RESULT = rlist;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            16 /*rules*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 5)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 12: // rules ::= rules LESSTHAN states MORETHAN LBRACE rules RBRACE
                    {
                        ArrayList RESULT = null;
                        int rlist1left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 6)
                        ).left;
                        int rlist1right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 6)
                        ).right;
                        ArrayList rlist1 = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 6)
                            ).value;
                        int statesleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).left;
                        int statesright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                        ).right;
                        ArrayList states = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 4)
                            ).value;
                        int rlist2left = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rlist2right = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList rlist2 = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1013 "LexParse.cup"

                        IEnumerator rs = rlist2.GetEnumerator();
                        while (rs.MoveNext())
                        {
                            int elem = (int)rs.Current;
                            regExps.addStates(elem, states);
                            rlist1.Add(elem);
                        }
                        RESULT = rlist1;

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            16 /*rules*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 6)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 11: // rules ::= rules rule
                    {
                        ArrayList RESULT = null;
                        int rlistleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int rlistright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        ArrayList rlist = (ArrayList)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        int rleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int rright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Integer r = (Integer)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1011 "LexParse.cup"
                        rlist.Add(r.intValue());
                        RESULT = rlist;
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            16 /*rules*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 10: // macro ::= IDENT EQUALS
                    {
                        Object RESULT = null;
                        int eleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).left;
                        int eright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                        ).right;
                        Object e = (Object)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).value;

#line 1006 "LexParse.cup"
                        syntaxError(ErrorMessages.REGEXP_EXPECTED, eleft, eright);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            2 /*macro*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 9: // macro ::= IDENT EQUALS series REGEXPEND
                    {
                        Object RESULT = null;
                        int nameleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).left;
                        int nameright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                        ).right;
                        String name = (String)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).value;
                        int definitionleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int definitionright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        RegExp definition = (RegExp)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;

#line 1004 "LexParse.cup"
                        macros.insert(name, definition);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            2 /*macro*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 8: // macro ::= UNICODE
                    {
                        Object RESULT = null;

#line 1002 "LexParse.cup"
                        charClasses.setMaxCharCode(0xFFFF);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            2 /*macro*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 7: // macro ::= FULL
                    {
                        Object RESULT = null;

#line 1000 "LexParse.cup"
                        charClasses.setMaxCharCode(255);
#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            2 /*macro*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 6: // macros ::= error
                    {
                        Object RESULT = null;

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            1 /*macros*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 5: // macros ::= macros macro
                    {
                        Object RESULT = null;

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            1 /*macros*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 4: // macros ::=
                    {
                        Object RESULT = null;

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            1 /*macros*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 3: // specification ::=
                    {
                        NFA RESULT = null;

#line 990 "LexParse.cup"

                        fatalError(ErrorMessages.NO_LEX_SPEC);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            4 /*specification*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 2: // specification ::= USERCODE macros DELIMITER rules DELIMITER EPILOGUE
                    {
                        NFA RESULT = null;

#line 946 "LexParse.cup"

                        scanner.t.stop();

                        Out.checkErrors();

                        Out.time(ErrorMessages.PARSING_TOOK, t);

                        macros.expand();
                        IEnumerator unused = macros.unused();
                        while (unused.MoveNext())
                        {
                            Out.warning(
                                "Macro \"" + unused.Current + "\" has been declared but never used."
                            );
                        }

                        SemCheck.check(regExps, macros, charClasses.getMaxCharCode(), scanner.file);

                        regExps.checkActions();

                        if (Options.dump)
                            charClasses.dump();

                        Out.print("Constructing NFA : ");

                        t.start();
                        int num = regExps.getNum();

                        RESULT = new NFA(
                            charClasses.getNumClasses(),
                            scanner,
                            regExps,
                            macros,
                            charClasses
                        );

                        eofActions.setNumLexStates(scanner.states.number());

                        for (int i = 0; i < num; i++)
                        {
                            if (regExps.isEOF(i))
                                eofActions.add(regExps.getStates(i), regExps.getAction(i));
                            else
                                RESULT.addRegExp(i);
                        }

                        if (scanner.standalone)
                            RESULT.addStandaloneRule();
                        t.stop();

                        Out.time("");
                        Out.time(ErrorMessages.NFA_TOOK, t);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            4 /*specification*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 5)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 1: // specification ::= USERCODE macros DELIMITER rules
                    {
                        NFA RESULT = null;

#line 896 "LexParse.cup"

                        scanner.t.stop();

                        Out.checkErrors();

                        Out.time(ErrorMessages.PARSING_TOOK, t);

                        macros.expand();
                        IEnumerator unused = macros.unused();
                        while (unused.MoveNext())
                        {
                            Out.warning(
                                "Macro \"" + unused.Current + "\" has been declared but never used."
                            );
                        }

                        SemCheck.check(regExps, macros, charClasses.getMaxCharCode(), scanner.file);

                        regExps.checkActions();

                        if (Options.dump)
                            charClasses.dump();

                        Out.print("Constructing NFA : ");

                        t.start();
                        int num = regExps.getNum();

                        RESULT = new NFA(
                            charClasses.getNumClasses(),
                            scanner,
                            regExps,
                            macros,
                            charClasses
                        );

                        eofActions.setNumLexStates(scanner.states.number());

                        for (int i = 0; i < num; i++)
                        {
                            if (regExps.isEOF(i))
                                eofActions.add(regExps.getStates(i), regExps.getAction(i));
                            else
                                RESULT.addRegExp(i);
                        }

                        if (scanner.standalone)
                            RESULT.addStandaloneRule();
                        t.stop();

                        Out.time("");
                        Out.time(ErrorMessages.NFA_TOOK, t);

#line default

                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            4 /*specification*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 3)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    return CUPΔLexParseΔresult;

                /*. . . . . . . . . . . . . . . . . . . .*/
                case 0: // $START ::= specification EOF
                    {
                        Object RESULT = null;
                        int start_valleft = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).left;
                        int start_valright = (
                            (java_cup.runtime.Symbol)
                                CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                        ).right;
                        NFA start_val = (NFA)
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).value;
                        RESULT = start_val;
                        CUPΔLexParseΔresult = new java_cup.runtime.Symbol(
                            0 /*$START*/
                            ,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 1)
                            ).left,
                            (
                                (java_cup.runtime.Symbol)
                                    CUPΔLexParseΔstack.elementAt(CUPΔLexParseΔtop - 0)
                            ).right,
                            RESULT
                        );
                    }
                    /* ACCEPT */
                    CUPΔLexParseΔparser.done_parsing();
                    return CUPΔLexParseΔresult;

                /* . . . . . .*/
                default:
                    throw new Exception("Invalid action number found in internal parse table");
            }
        }
    }
}
