001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.cnd.api.model.deep;
043:
044: import java.util.List;
045:
046: import org.netbeans.modules.cnd.api.model.CsmOffsetable;
047: import org.netbeans.modules.cnd.api.model.CsmScopeElement;
048:
049: /**
050: * Represents expression
051: * @author Vladimir Kvashin
052: */
053: public interface CsmExpression extends CsmOffsetable, CsmScopeElement {
054:
055: //TODO: check in accordance to C++ standard
056: public enum Kind {
057:
058: //
059: // Primary expressions
060: //
061:
062: // TODO: perhaps it isn't worth making separate kinds for different literals
063: INTEGER_LITERAL, CHAR_LITERAL, FLOAT_LITERAL, STRING_LITERAL, BOOLEAN_LITERAL,
064:
065: THIS, PRIMARY_BRACKETED,
066:
067: REFERENCE,
068:
069: //
070: // Postfix expressions
071: //
072: SUBSCRIPT, FUNCTIONCALL,
073: // TODO: what is " postfix-expression ( expression-list ) " ?
074: // TODO: add
075: SIMPLETYPE_INT, SIMPLETYPE_SHORT, SIMPLETYPE_DOUBLE, SIMPLETYPE_FLOAT, SIMPLETYPE_CHAR, SIMPLETYPE_WCHART, SIMPLETYPE_SIGNED, SIMPLETYPE_UNSIGNED, SIMPLETYPE_BOOL, SIMPLETYPE_LONG,
076:
077: TYPENAME_IDENTIFIER, TYPENAME_TEMPLATEID,
078:
079: DOT_IDEXPRESSION, ARROW_IDEXPRESSION, DOT_TEMPL_IDEXPRESS, ARROW_TEMPL_IDEXP,
080:
081: DOT_DESTRUCTOR, ARROW_DESTRUCTOR,
082:
083: POST_INCREMENT, POST_DECREMENT,
084:
085: DYNAMIC_CAST, REINTERPRET_CAST, STATIC_CAST, CONST_CAST, TYPEID_EXPRESSION, TYPEID_TYPEID,
086:
087: //
088: // Unary expressions
089: //
090: PRE_INCREMENT, PRE_DECREMENT, STAR_CASTEXPRESSION, AMPSND_CASTEXPRESSION, PLUS_CASTEXPRESSION, MINUS_CASTEXPRESSION, NOT_CASTEXPRESSION, TILDE_CASTEXPRESSION, SIZEOF_UNARYEXPRESSION, SIZEOF_TYPEID,
091:
092: NEW_NEWTYPEID, NEW_TYPEID, DELETE_CASTEXPRESSION, DELETE_VECTORCASTEXPRESSION,
093:
094: CASTEXPRESSION, PM_DOTSTAR, PM_ARROWSTAR, MULTIPLICATIVE_MULTIPLY, MULTIPLICATIVE_DIVIDE, MULTIPLICATIVE_MODULUS, ADDITIVE_PLUS, ADDITIVE_MINUS, SHIFT_LEFT, SHIFT_RIGHT,
095:
096: //
097: // Relational
098: //
099: LESSTHAN, GREATERTHAN, LESSTHANEQUALTO, GREATERTHANEQUALTO,
100:
101: //
102: // Equality
103: //
104: EQUALS, NOTEQUALS,
105:
106: BITAND, EXCLUSIVEOR, INCLUSIVEOR, LOGICAL_AND, LOGICAL_OR, CONDITIONAL, THROW, ASSIGNMENT_NORMAL, ASSIGNMENT_PLUS, ASSIGNMENT_MINUS, ASSIGNMENT_MULT, ASSIGNMENT_DIV, ASSIGNMENT_MOD, ASSIGNMENT_LSHIFT, ASSIGNMENT_RSHIFT, ASSIGNMENT_AND, ASSIGNMENT_OR, ASSIGNMENT_XOR, LIST
107:
108: }
109:
110: /**
111: * Gets this expression kind
112: */
113: Kind getKind();
114:
115: /**
116: * Gets parent expression or null if this is no parent expression
117: */
118: CsmExpression getParent();
119:
120: /**
121: * Gets this expression operands
122: */
123: List<CsmExpression> getOperands();
124: }
|