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