The Psyche Project
Public Types | Public Member Functions | List of all members
psy::C::ExpressionSyntax Class Reference

The ExpressionSyntax class. More...

#include <SyntaxNodes.h>

Inheritance diagram for psy::C::ExpressionSyntax:
psy::C::SyntaxNode psy::C::MIXIN_GNUExtensionFlag psy::C::Managed psy::C::AmbiguousCastOrBinaryExpressionSyntax psy::C::ArraySubscriptExpressionSyntax psy::C::AssignmentExpressionSyntax psy::C::BinaryExpressionSyntax psy::C::CallExpressionSyntax psy::C::CastExpressionSyntax psy::C::CompoundLiteralExpressionSyntax psy::C::ConditionalExpressionSyntax psy::C::ConstantExpressionSyntax psy::C::ExtGNU_ChooseExpressionSyntax psy::C::ExtGNU_ComplexValuedExpressionSyntax psy::C::ExtGNU_EnclosedCompoundStatementExpressionSyntax psy::C::GenericSelectionExpressionSyntax psy::C::MemberAccessExpressionSyntax psy::C::NameSyntax psy::C::OffsetOfExpressionSyntax psy::C::ParenthesizedExpressionSyntax psy::C::SequencingExpressionSyntax psy::C::StringLiteralExpressionSyntax psy::C::TypeTraitExpressionSyntax psy::C::UnaryExpressionSyntax psy::C::VAArgumentExpressionSyntax

Public Types

using BaseSyntax = SyntaxNode
 

Public Member Functions

virtual ExpressionSyntax * asExpression () override
 
virtual const ExpressionSyntax * asExpression () const override
 
SyntaxToken extensionKeyword () const override
 
virtual std::vector< SyntaxHolder > childNodesAndTokens () const override
 
 SyntaxNode (SyntaxTree *tree, SyntaxKind kind=SyntaxKind::Error)
 
 SyntaxNode (const SyntaxNode &other)=delete
 
- Public Member Functions inherited from psy::C::SyntaxNode
const SyntaxTree * syntaxTree () const
 
SyntaxKind kind () const
 
bool isKind (SyntaxKind k)
 
SyntaxToken firstToken () const
 
SyntaxToken lastToken () const
 
virtual TranslationUnitSyntax * asTranslationUnit ()
 
virtual const TranslationUnitSyntax * asTranslationUnit () const
 
virtual DeclarationSyntax * asDeclaration ()
 
virtual const DeclarationSyntax * asDeclaration () const
 
virtual IncompleteDeclarationSyntax * asIncompleteDeclaration ()
 
virtual const IncompleteDeclarationSyntax * asIncompleteDeclaration () const
 
virtual NamedDeclarationSyntax * asNamedDeclaration ()
 
virtual const NamedDeclarationSyntax * asNamedDeclaration () const
 
virtual TypeDeclarationSyntax * asTypeDeclaration ()
 
virtual const TypeDeclarationSyntax * asTypeDeclaration () const
 
virtual TagDeclarationSyntax * asTagDeclaration ()
 
virtual const TagDeclarationSyntax * asTagDeclaration () const
 
virtual StructOrUnionDeclarationSyntax * asStructOrUnionDeclaration ()
 
virtual const StructOrUnionDeclarationSyntax * asStructOrUnionDeclaration () const
 
virtual EnumDeclarationSyntax * asEnumDeclaration ()
 
virtual const EnumDeclarationSyntax * asEnumDeclaration () const
 
virtual EnumeratorDeclarationSyntax * asEnumeratorDeclaration ()
 
virtual const EnumeratorDeclarationSyntax * asEnumeratorDeclaration () const
 
virtual ValueDeclarationSyntax * asValueDeclaration ()
 
virtual const ValueDeclarationSyntax * asValueDeclaration () const
 
virtual DeclaratorDeclarationSyntax * asDeclaratorDeclaration ()
 
virtual const DeclaratorDeclarationSyntax * asDeclaratorDeclaration () const
 
virtual VariableAndOrFunctionDeclarationSyntax * asVariableAndOrFunctionDeclaration ()
 
virtual const VariableAndOrFunctionDeclarationSyntax * asVariableAndOrFunctionDeclaration () const
 
virtual ParameterDeclarationSyntax * asParameterDeclaration ()
 
virtual const ParameterDeclarationSyntax * asParameterDeclaration () const
 
virtual FieldDeclarationSyntax * asFieldDeclaration ()
 
virtual const FieldDeclarationSyntax * asFieldDeclaration () const
 
virtual TypedefDeclarationSyntax * asTypedefDeclaration ()
 
virtual const TypedefDeclarationSyntax * asTypedefDeclaration () const
 
virtual StaticAssertDeclarationSyntax * asStaticAssertDeclaration ()
 
virtual const StaticAssertDeclarationSyntax * asStaticAssertDeclaration () const
 
virtual FunctionDefinitionSyntax * asFunctionDefinition ()
 
virtual const FunctionDefinitionSyntax * asFunctionDefinition () const
 
virtual ExtPSY_TemplateDeclarationSyntax * asExtPSY_TemplateDeclaration ()
 
virtual const ExtPSY_TemplateDeclarationSyntax * asExtPSY_TemplateDeclaration () const
 
virtual ExtGNU_AsmStatementDeclarationSyntax * asExtGNU_AsmStatementDeclaration ()
 
virtual const ExtGNU_AsmStatementDeclarationSyntax * asExtGNU_AsmStatementDeclaration () const
 
virtual ExtKR_ParameterDeclarationSyntax * asExtKR_ParameterDeclaration ()
 
virtual const ExtKR_ParameterDeclarationSyntax * asExtKR_ParameterDeclaration () const
 
virtual SpecifierSyntax * asSpecifier ()
 
virtual const SpecifierSyntax * asSpecifier () const
 
virtual TrivialSpecifierSyntax * asTrivialSpecifier ()
 
virtual const TrivialSpecifierSyntax * asTrivialSpecifier () const
 
virtual StorageClassSyntax * asStorageClass ()
 
virtual const StorageClassSyntax * asStorageClass () const
 
virtual BasicTypeSpecifierSyntax * asBasicTypeSpecifier ()
 
virtual const BasicTypeSpecifierSyntax * asBasicTypeSpecifier () const
 
virtual VoidTypeSpecifierSyntax * asVoidTypeSpecifier ()
 
virtual const VoidTypeSpecifierSyntax * asVoidTypeSpecifier () const
 
virtual TagTypeSpecifierSyntax * asTagTypeSpecifier ()
 
virtual const TagTypeSpecifierSyntax * asTagTypeSpecifier () const
 
virtual TagDeclarationAsSpecifierSyntax * asTagDeclarationAsSpecifier ()
 
virtual AtomicTypeSpecifierSyntax * asAtomicTypeSpecifier ()
 
virtual const AtomicTypeSpecifierSyntax * asAtomicTypeSpecifier () const
 
virtual const TagDeclarationAsSpecifierSyntax * asTagDeclarationAsSpecifier () const
 
virtual TypeQualifierSyntax * asTypeQualifier ()
 
virtual const TypeQualifierSyntax * asTypeQualifier () const
 
virtual FunctionSpecifierSyntax * asFunctionSpecifier ()
 
virtual const FunctionSpecifierSyntax * asFunctionSpecifier () const
 
virtual AlignmentSpecifierSyntax * asAlignmentSpecifier ()
 
virtual const AlignmentSpecifierSyntax * asAlignmentSpecifier () const
 
virtual TypedefNameSyntax * asTypedefName ()
 
virtual const TypedefNameSyntax * asTypedefName () const
 
virtual ExtGNU_AttributeSpecifierSyntax * asExtGNU_AttributeSpecifier ()
 
virtual const ExtGNU_AttributeSpecifierSyntax * asExtGNU_AttributeSpecifier () const
 
virtual ExtGNU_AttributeSyntax * asExtGNU_Attribute ()
 
virtual const ExtGNU_AttributeSyntax * asExtGNU_Attribute () const
 
virtual ExtGNU_AsmLabelSyntax * asExtGNU_AsmLabel ()
 
virtual const ExtGNU_AsmLabelSyntax * asExtGNU_AsmLabel () const
 
virtual ExtGNU_TypeofSyntax * asExtGNU_Typeof ()
 
virtual const ExtGNU_TypeofSyntax * asExtGNU_Typeof () const
 
virtual ExtPSY_QuantifiedTypeSpecifierSyntax * asExtPSY_QuantifiedTypeSpecifier ()
 
virtual const ExtPSY_QuantifiedTypeSpecifierSyntax * asExtPSY_QuantifiedTypeSpecifier () const
 
virtual DeclaratorSyntax * asDeclarator ()
 
virtual const DeclaratorSyntax * asDeclarator () const
 
virtual PointerDeclaratorSyntax * asPointerDeclarator ()
 
virtual const PointerDeclaratorSyntax * asPointerDeclarator () const
 
virtual IdentifierDeclaratorSyntax * asIdentifierDeclarator ()
 
virtual const IdentifierDeclaratorSyntax * asIdentifierDeclarator () const
 
virtual AbstractDeclaratorSyntax * asAbstractDeclarator ()
 
virtual const AbstractDeclaratorSyntax * asAbstractDeclarator () const
 
virtual ParenthesizedDeclaratorSyntax * asParenthesizedDeclarator ()
 
virtual const ParenthesizedDeclaratorSyntax * asParenthesizedDeclarator () const
 
virtual ArrayOrFunctionDeclaratorSyntax * asArrayOrFunctionDeclarator ()
 
virtual const ArrayOrFunctionDeclaratorSyntax * asArrayOrFunctionDeclarator () const
 
virtual DeclaratorSuffixSyntax * asDeclaratorSuffix ()
 
virtual const DeclaratorSuffixSyntax * asDeclaratorSuffix () const
 
virtual SubscriptSuffixSyntax * asSubscriptSuffix ()
 
virtual const SubscriptSuffixSyntax * asSubscriptSuffix () const
 
virtual ParameterSuffixSyntax * asParameterSuffix ()
 
virtual const ParameterSuffixSyntax * asParameterSuffix () const
 
virtual BitfieldDeclaratorSyntax * asBitfieldDeclarator ()
 
virtual const BitfieldDeclaratorSyntax * asBitfieldDeclarator () const
 
virtual InitializerSyntax * asInitializer ()
 
virtual const InitializerSyntax * asInitializer () const
 
virtual ExpressionInitializerSyntax * asExpressionInitializer ()
 
virtual const ExpressionInitializerSyntax * asExpressionInitializer () const
 
virtual BraceEnclosedInitializerSyntax * asBraceEnclosedInitializer ()
 
virtual const BraceEnclosedInitializerSyntax * asBraceEnclosedInitializer () const
 
virtual DesignatedInitializerSyntax * asDesignatedInitializer ()
 
virtual const DesignatedInitializerSyntax * asDesignatedInitializer () const
 
virtual DesignatorSyntax * asDesignator ()
 
virtual const DesignatorSyntax * asDesignator () const
 
virtual ArrayDesignatorSyntax * asArrayDesignator ()
 
virtual const ArrayDesignatorSyntax * asArrayDesignator () const
 
virtual FieldDesignatorSyntax * asFieldDesignator ()
 
virtual const FieldDesignatorSyntax * asFieldDesignator () const
 
virtual OffsetOfDesignatorSyntax * asOffsetOfDesignator ()
 
virtual const OffsetOfDesignatorSyntax * asOffsetOfDesignator () const
 
virtual ConstantExpressionSyntax * asConstantExpression ()
 
virtual const ConstantExpressionSyntax * asConstantExpression () const
 
virtual StringLiteralExpressionSyntax * asStringLiteralExpression ()
 
virtual const StringLiteralExpressionSyntax * asStringLiteralExpression () const
 
virtual ParenthesizedExpressionSyntax * asParenthesizedExpression ()
 
virtual const ParenthesizedExpressionSyntax * asParenthesizedExpression () const
 
virtual GenericSelectionExpressionSyntax * asGenericSelectionExpression ()
 
virtual const GenericSelectionExpressionSyntax * asGenericSelectionExpression () const
 
virtual GenericAssociationSyntax * asGenericAssociation ()
 
virtual const GenericAssociationSyntax * asGenericAssociation () const
 
virtual ExtGNU_EnclosedCompoundStatementExpressionSyntax * asExtGNU_EnclosedCompoundStatementExpression ()
 
virtual const ExtGNU_EnclosedCompoundStatementExpressionSyntax * asExtGNU_EnclosedCompoundStatementExpression () const
 
virtual ExtGNU_ComplexValuedExpressionSyntax * asExtGNU_ComplexValuedExpression ()
 
virtual const ExtGNU_ComplexValuedExpressionSyntax * asExtGNU_ComplexValuedExpression () const
 
virtual NameSyntax * asName ()
 
virtual const NameSyntax * asName () const
 
virtual IdentifierNameSyntax * asIdentifierName ()
 
virtual const IdentifierNameSyntax * asIdentifierName () const
 
virtual PredefinedNameSyntax * asPredefinedName ()
 
virtual const PredefinedNameSyntax * asPredefinedName () const
 
virtual UnaryExpressionSyntax * asUnaryExpression ()
 
virtual const UnaryExpressionSyntax * asUnaryExpression () const
 
virtual PostfixUnaryExpressionSyntax * asPostfixUnaryExpression ()
 
virtual const PostfixUnaryExpressionSyntax * asPostfixUnaryExpression () const
 
virtual PrefixUnaryExpressionSyntax * asPrefixUnaryExpression ()
 
virtual const PrefixUnaryExpressionSyntax * asPrefixUnaryExpression () const
 
virtual MemberAccessExpressionSyntax * asMemberAccessExpression ()
 
virtual const MemberAccessExpressionSyntax * asMemberAccessExpression () const
 
virtual ArraySubscriptExpressionSyntax * asArraySubscriptExpression ()
 
virtual const ArraySubscriptExpressionSyntax * asArraySubscriptExpression () const
 
virtual TypeTraitExpressionSyntax * asTypeTraitExpression ()
 
virtual const TypeTraitExpressionSyntax * asTypeTraitExpression () const
 
virtual CallExpressionSyntax * asCallExpression ()
 
virtual const CallExpressionSyntax * asCallExpression () const
 
virtual CompoundLiteralExpressionSyntax * asCompoundLiteralExpression ()
 
virtual const CompoundLiteralExpressionSyntax * asCompoundLiteralExpression () const
 
virtual CastExpressionSyntax * asCastExpression ()
 
virtual const CastExpressionSyntax * asCastExpression () const
 
virtual VAArgumentExpressionSyntax * asVAArgumentExpression ()
 
virtual const VAArgumentExpressionSyntax * asVAArgumentExpression () const
 
virtual OffsetOfExpressionSyntax * asOffsetOfExpression ()
 
virtual const OffsetOfExpressionSyntax * asOffsetOfExpression () const
 
virtual BinaryExpressionSyntax * asBinaryExpression ()
 
virtual const BinaryExpressionSyntax * asBinaryExpression () const
 
virtual ConditionalExpressionSyntax * asConditionalExpression ()
 
virtual const ConditionalExpressionSyntax * asConditionalExpression () const
 
virtual AssignmentExpressionSyntax * asAssignmentExpression ()
 
virtual const AssignmentExpressionSyntax * asAssignmentExpression () const
 
virtual SequencingExpressionSyntax * asSequencingExpression ()
 
virtual const SequencingExpressionSyntax * asSequencingExpression () const
 
virtual ExtGNU_ChooseExpressionSyntax * asExtGNU_ChooseExpression ()
 
virtual const ExtGNU_ChooseExpressionSyntax * asExtGNU_ChooseExpression () const
 
virtual StatementSyntax * asStatement ()
 
virtual const StatementSyntax * asStatement () const
 
virtual CompoundStatementSyntax * asCompoundStatement ()
 
virtual const CompoundStatementSyntax * asCompoundStatement () const
 
virtual DeclarationStatementSyntax * asDeclarationStatement ()
 
virtual const DeclarationStatementSyntax * asDeclarationStatement () const
 
virtual ExpressionStatementSyntax * asExpressionStatement ()
 
virtual const ExpressionStatementSyntax * asExpressionStatement () const
 
virtual LabeledStatementSyntax * asLabeledStatement ()
 
virtual const LabeledStatementSyntax * asLabeledStatement () const
 
virtual IfStatementSyntax * asIfStatement ()
 
virtual const IfStatementSyntax * asIfStatement () const
 
virtual SwitchStatementSyntax * asSwitchStatement ()
 
virtual const SwitchStatementSyntax * asSwitchStatement () const
 
virtual WhileStatementSyntax * asWhileStatement ()
 
virtual const WhileStatementSyntax * asWhileStatement () const
 
virtual DoStatementSyntax * asDoStatement ()
 
virtual const DoStatementSyntax * asDoStatement () const
 
virtual ForStatementSyntax * asForStatement ()
 
virtual const ForStatementSyntax * asForStatement () const
 
virtual GotoStatementSyntax * asGotoStatement ()
 
virtual const GotoStatementSyntax * asGotoStatement () const
 
virtual ContinueStatementSyntax * asContinueStatement ()
 
virtual const ContinueStatementSyntax * asContinueStatement () const
 
virtual BreakStatementSyntax * asBreakStatement ()
 
virtual const BreakStatementSyntax * asBreakStatement () const
 
virtual ReturnStatementSyntax * asReturnStatement ()
 
virtual const ReturnStatementSyntax * asReturnStatement () const
 
virtual ExtGNU_AsmStatementSyntax * asExtGNU_AsmStatement ()
 
virtual const ExtGNU_AsmStatementSyntax * asExtGNU_AsmStatement () const
 
virtual ExtGNU_AsmQualifierSyntax * asExtGNU_AsmQualifier ()
 
virtual const ExtGNU_AsmQualifierSyntax * asExtGNU_AsmQualifier () const
 
virtual ExtGNU_AsmOperandSyntax * asExtGNU_AsmOperand ()
 
virtual const ExtGNU_AsmOperandSyntax * asExtGNU_AsmOperand () const
 
virtual TypeNameSyntax * asTypeName ()
 
virtual const TypeNameSyntax * asTypeName () const
 
virtual TypeReferenceSyntax * asTypeReference ()
 
virtual const TypeReferenceSyntax * asTypeReference () const
 
virtual ExpressionAsTypeReferenceSyntax * asExpressionAsTypeReference ()
 
virtual const ExpressionAsTypeReferenceSyntax * asExpressionAsTypeReference () const
 
virtual TypeNameAsTypeReferenceSyntax * asTypeNameAsTypeReference ()
 
virtual const TypeNameAsTypeReferenceSyntax * asTypeNameAsTypeReference () const
 
virtual AmbiguousTypeNameOrExpressionAsTypeReferenceSyntax * asAmbiguousTypeNameOrExpressionAsTypeReference ()
 
virtual const AmbiguousTypeNameOrExpressionAsTypeReferenceSyntax * asAmbiguousTypeNameOrExpressionAsTypeReference () const
 
virtual AmbiguousCastOrBinaryExpressionSyntax * asAmbiguousCastOrBinaryExpression ()
 
virtual const AmbiguousCastOrBinaryExpressionSyntax * asAmbiguousCastOrBinaryExpression () const
 
virtual AmbiguousExpressionOrDeclarationStatementSyntax * asAmbiguousExpressionOrDeclarationStatement ()
 
virtual const AmbiguousExpressionOrDeclarationStatementSyntax * asAmbiguousExpressionOrDeclarationStatement () const
 
void acceptVisitor (SyntaxVisitor *visitor) const
 
- Public Member Functions inherited from psy::C::Managed
 Managed (const Managed &)=delete
 
Managed & operator= (const Managed &)=delete
 
void * operator new (size_t size, MemoryPool *pool)
 
void operator delete (void *)
 
void operator delete (void *, MemoryPool *)
 

Additional Inherited Members

- Static Public Member Functions inherited from psy::C::SyntaxNode
static void acceptVisitor (const SyntaxNode *node, SyntaxVisitor *visitor)
 
template<class PtrT , class DerivedListT >
static void acceptVisitor (List< PtrT, DerivedListT > *it, SyntaxVisitor *visitor)
 
- Protected Member Functions inherited from psy::C::SyntaxNode
 SyntaxNode (SyntaxTree *tree, SyntaxKind kind=SyntaxKind::Error)
 
 SyntaxNode (const SyntaxNode &other)=delete
 
SyntaxNode & operator= (const SyntaxNode &other)=delete
 
SyntaxToken tokenAtIndex (LexedTokens::IndexType tkIdx) const
 
SyntaxToken findValidToken (const std::vector< SyntaxHolder > &syntaxHolders) const
 
void visitChildren (SyntaxVisitor *visitor) const
 
virtual SyntaxVisitor::Action dispatchVisit (SyntaxVisitor *visitor) const =0
 
- Protected Attributes inherited from psy::C::SyntaxNode
SyntaxTree * tree_
 
SyntaxKind kind_
 
- Protected Attributes inherited from psy::C::MIXIN_GNUExtensionFlag
LexedTokens::IndexType extKwTkIdx_ = LexedTokens::invalidIndex()
 

Detailed Description

The ExpressionSyntax class.

The base class of every expression.

The type hierarchy of ExpressionSyntax generally corresponds to the grammar of expressions, but there are exceptions to this correspondence. Consider the prefix and postfix variations of the increment/decrement operations: both consist of one operand and one operator, however, the former is a sentence of a unary-expression and the latter, of postfix-expression (an asymmetry that is observed in the parser as well, see note in Parser:parseExpression); for the AST, we opt for a structure that is closer to the meaning of the constructs in the language semantics, regardless of the grammar non-terminal that derived them.

Remarks
6.5
Note
Similar to:
  • clang::Expr of LLVM/Clang.
  • clang::syntax::Expression of Clang's Libtooling.
  • Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax of Roslyn.

The documentation for this class was generated from the following file: