1bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea/*
2bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * [The "BSD licence"]
3bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * Copyright (c) 2011 Terence Parr
4bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * All rights reserved.
5bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *
6bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * Conversion to C#:
7bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc.
8bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * All rights reserved.
9bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *
10bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * Redistribution and use in source and binary forms, with or without
11bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * modification, are permitted provided that the following conditions
12bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * are met:
13bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * 1. Redistributions of source code must retain the above copyright
14bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *    notice, this list of conditions and the following disclaimer.
15bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * 2. Redistributions in binary form must reproduce the above copyright
16bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *    notice, this list of conditions and the following disclaimer in the
17bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *    documentation and/or other materials provided with the distribution.
18bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * 3. The name of the author may not be used to endorse or promote products
19bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *    derived from this software without specific prior written permission.
20bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea *
21bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea */
32bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea
33bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Maleanamespace Antlr.Runtime
34bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea{
35bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea    using CLSCompliant = System.CLSCompliantAttribute;
36bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea
37bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea    /** <summary>
38bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  Rules that return more than a single value must return an object
39bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  containing all the values.  Besides the properties defined in
40bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  RuleLabelScope.predefinedRulePropertiesScope there may be user-defined
41bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  return values.  This class simply defines the minimum properties that
42bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  are always defined and methods to access the others that might be
43bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  available depending on output option such as template and tree.
44bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  </summary>
45bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *
46bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  <remarks>
47bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  Note text is not an actual property of the return value, it is computed
48bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  from start and stop using the input stream's toString() method.  I
49bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  could add a ctor to this so that we can pass in and store the input
50bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  stream, but I'm not sure we want to do that.  It would seem to be undefined
51bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  to get the .text property anyway if the rule matches tokens from multiple
52bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  input streams.
53bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *
54bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  I do not use getters for fields of objects that are used simply to
55bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  group values such as this aggregate.  The getters/setters are there to
56bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  satisfy the superclass interface.
57bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     *  </remarks>
58bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea     */
59bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea    public class ParserRuleReturnScope<TToken> : IRuleReturnScope<TToken>
60bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea    {
61bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        private TToken _start;
62bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        private TToken _stop;
63bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea
64bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        public TToken Start
65bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        {
66bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            get
67bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            {
68bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea                return _start;
69bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            }
70bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea
71bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            set
72bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            {
73bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea                _start = value;
74bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea            }
75bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        }
76bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea
77bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        public TToken Stop
78bdcd07921b76d3df2cc7e6563718dde79876b0adDaniel Malea        {
79            get
80            {
81                return _stop;
82            }
83
84            set
85            {
86                _stop = value;
87            }
88        }
89
90        object IRuleReturnScope.Start
91        {
92            get
93            {
94                return Start;
95            }
96        }
97
98        object IRuleReturnScope.Stop
99        {
100            get
101            {
102                return Stop;
103            }
104        }
105    }
106}
107