The StaDyn Programming Language
Source code documentation of StaDyn, a hybrid static and dynamic typing language.
Visitor.cs
Go to the documentation of this file.
1 // -------------------------------------------------------------------------- //
3 // Project rROTOR //
4 // -------------------------------------------------------------------------- //
5 // File: Visitor.cs //
6 // Authors: Cristina Gonzalez Muņoz - cristi.gm@gmail.com //
7 // Francisco Ortin - francisco.ortin@gmail.com //
8 // Description: //
9 // Abstract class to define different visits over the abstract syntax tree //
10 // Implements Visitor pattern [Visitor]. //
11 // -------------------------------------------------------------------------- //
12 // Create date: 11-12-2006 //
13 // Modification date: 25-04-2007 //
15 
16 using System;
17 using System.Collections.Generic;
18 using System.Text;
19 
20 using AST;
21 
22 namespace Tools {
29  public abstract class Visitor {
30  public abstract Object Visit(SourceFile node, Object obj);
31  public abstract Object Visit(Namespace node, Object obj);
32  public abstract Object Visit(DeclarationSet node, Object obj);
33  public abstract Object Visit(FieldDeclarationSet node, Object obj);
34  public abstract Object Visit(IdDeclaration node, Object obj);
35  public abstract Object Visit(Definition node, Object obj);
36  public abstract Object Visit(ConstantDefinition node, Object obj);
37  public abstract Object Visit(ClassDefinition node, Object obj);
38  public abstract Object Visit(InterfaceDefinition node, Object obj);
39  public abstract Object Visit(PropertyDefinition node, Object obj);
40  public abstract Object Visit(FieldDeclaration node, Object obj);
41  public abstract Object Visit(FieldDefinition node, Object obj);
42  public abstract Object Visit(ConstantFieldDefinition node, Object obj);
43  public abstract Object Visit(MethodDeclaration node, Object obj);
44  public abstract Object Visit(MethodDefinition node, Object obj);
45  public abstract Object Visit(ConstructorDefinition node, Object obj);
46 
47  // Expressions
48  public abstract Object Visit(ArgumentExpression node, Object obj);
49  public abstract Object Visit(ArithmeticExpression node, Object obj);
50  public abstract Object Visit(ArrayAccessExpression node, Object obj);
51  public abstract Object Visit(AssignmentExpression node, Object obj);
52  public abstract Object Visit(BaseCallExpression node, Object obj);
53  public abstract Object Visit(BaseExpression node, Object obj);
54  public abstract Object Visit(BinaryExpression node, Object obj);
55  public abstract Object Visit(BitwiseExpression node, Object obj);
56  public abstract Object Visit(BoolLiteralExpression node, Object obj);
57  public abstract Object Visit(CastExpression node, Object obj);
58  public abstract Object Visit(CharLiteralExpression node, Object obj);
59  public abstract Object Visit(CompoundExpression node, Object obj);
60  public abstract Object Visit(DoubleLiteralExpression node, Object obj);
61  public abstract Object Visit(FieldAccessExpression node, Object obj);
62  public abstract Object Visit(IntLiteralExpression node, Object obj);
63  public abstract Object Visit(InvocationExpression node, Object obj);
64  public abstract Object Visit(IsExpression node, Object obj);
65  public abstract Object Visit(LogicalExpression node, Object obj);
66  public abstract Object Visit(NewArrayExpression node, Object obj);
67  public abstract Object Visit(NewExpression node, Object obj);
68  public abstract Object Visit(NullExpression node, Object obj);
69  public abstract Object Visit(QualifiedIdentifierExpression node, Object obj);
70  public abstract Object Visit(RelationalExpression node, Object obj);
71  public abstract Object Visit(SingleIdentifierExpression node, Object obj);
72  public abstract Object Visit(StringLiteralExpression node, Object obj);
73  public abstract Object Visit(TernaryExpression node, Object obj);
74  public abstract Object Visit(ThisExpression node, Object obj);
75  public abstract Object Visit(UnaryExpression node, Object obj);
76 
77  // Statements
78  public abstract Object Visit(AssertStatement node, Object obj);
79  public abstract Object Visit(Block node, Object obj);
80  public abstract Object Visit(BreakStatement node, Object obj);
81  public abstract Object Visit(CatchStatement node, Object obj);
82  public abstract Object Visit(ContinueStatement node, Object obj);
83  public abstract Object Visit(DoStatement node, Object obj);
84  public abstract Object Visit(ForeachStatement node, Object obj);
85  public abstract Object Visit(ForStatement node, Object obj);
86  public abstract Object Visit(IfElseStatement node, Object obj);
87  public abstract Object Visit(MoveStatement node, Object obj);
88  public abstract Object Visit(ReturnStatement node, Object obj);
89  public abstract Object Visit(SwitchLabel node, Object obj);
90  public abstract Object Visit(SwitchSection node, Object obj);
91  public abstract Object Visit(SwitchStatement node, Object obj);
92  public abstract Object Visit(ThetaStatement node, Object obj);
93  public abstract Object Visit(ThrowStatement node, Object obj);
94  public abstract Object Visit(ExceptionManagementStatement node, Object obj);
95  public abstract Object Visit(WhileStatement node, Object obj);
96 
97 
98 
99  #region getInheritedAttributes<T>()
100  public static T getInheritedAttributes<T>(Object attributes, int index) {
109  bool isArray = attributes is System.Array;
110  T attribute = default(T);
111  if (!isArray && index > 0)
112  throw new ArgumentException("The index parameter should be 0 the attributes parameter is not an array.");
113  if (!isArray) {
114  if (attributes is T)
115  attribute = (T)attributes;
116  else
117  throw new ArgumentException("The expected type is not the same as the actual one.");
118  return attribute;
119  }
120  Object[] array = attributes as Object[];
121  if (array == null)
122  throw new ArgumentException("The expected type is not the same as the actual one.");
123  if (array[index] == null)
124  return default(T);
125  if (!(array[index] is T))
126  throw new ArgumentException(String.Format("The {0} expected type is not the same as the actual one.", index));
127  if (array[index] is T)
128  attribute=(T)array[index];
129  return attribute;
130  }
137  public static T getInheritedAttributes<T>(Object attributes) {
138  return getInheritedAttributes<T>(attributes, 0);
139  }
140  #endregion
141 
142  }
143 }
Encapsulates a Return statement of our programming languages.
Encapsulates a &#39;base&#39; expression.
Encapsulates a definition of a concrete method.
Encapsulates a Break statement of our programming languages.
Encapsulates a binary expression of our programming language.
Encapsulates the qualified name expression.
Encapsulates a Case statement of our programming languages.
Encapsulates a Do statement of our programming language.
Definition: DoStatement.cs:34
Encapsulates a string literal expression.
Encapsulates the expression to access a field.
Encapsulates a block of statements.
Definition: Block.cs:34
Encapsulates a namespace definition.
Definition: Namespace.cs:35
Encapsulates a Catch statement of our programming languages.
Encapsulates a logical binary expression.
Encapsulates a invocation expression.
Encapsulates a boolean literal expression.
Encapsulates a cast expression.
Encapsulates a definition of a concrete field.
Abstract class to define different visits over the abstract syntax tree.
Definition: Visitor.cs:29
abstract Object Visit(SourceFile node, Object obj)
Encapsulates a constant field definition.
Encapsulates a definition.
Definition: Definition.cs:36
Encapsulates arithmetic binary expressions.
Encapsulates a For statement of our programming languages.
Definition: ForStatement.cs:34
Encapsulates a While statement of our programming languages.
Encapsulates a null expression.
Encapsulates a Is expression.
Definition: IsExpression.cs:35
Encapsulates a definition of a concrete interface.
Encapsulates a Assert statement of our programming languages.
Encapsulates a switch label (Case + condition or Default section).
Definition: SwitchLabel.cs:47
Encapsulates a identifier expression of our programming language.
Encapsulates a statement with several declarations.
Encapsulates a declaration of a concrete method.
Encapsulates a set of expressions.
Encapsulates a Theta function to use in SSA algorithm.
Encapsulates a relational binary expression.
Encapsulates a bitwise binary expression.
Encapsulates assignment binary expressions.
Encapsulates a ternary expression of our programming language.
Encapsulates a If-Else statement of our programming language.
Encapsulates a new array expression.
Encapsulates a definition of a concrete constructor.
Encapsulates the source code.
Definition: SourceFile.cs:35
Encapsulates a Try-Catch-finally statement of our programming languages. As C# states catch blcok and...
Encapsulates a string literal expression.
Encapsulates a declaration.
Encapsulates a argument expression of our programming language.
Encapsulates a &#39;this&#39; expression.
Encapsulates a unary expression of our programming language.
Encapsulates a integer literal expression.
Encapsulates a set of field declarations.
Encapsulates a declaration of a concrete field.
Encapsulates a constant definition.
Encapsulates the array expression to access the concrete position.
Encapsulates a Move instruction to use in SSA algorithm
Encapsulates a Continue statement of our programming languages.
static T getInheritedAttributes< T >(Object attributes, int index)
Generic helper function that takes the visitor parameter an converts it into the appropiate inherited...
Definition: Visitor.cs:108
Encapsulates a Throw statement of our programming languages.
Encapsulates a Foreach statement of our programming languages.
Encapsulates a invocation expression to base class.
Encapsulates a new expression.
Encapsulates a property definition.
Encapsulates a definition of a concrete class.
Encapsulates a Switch statement of our programming languages.