/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="stateNode">StateDeclarationNode</param> /// <param name="isModel">Is a model</param> internal BlockSyntax(IPSharpProgram program, MachineDeclaration machineNode, StateDeclaration stateNode, bool isModel) : base(program, isModel) { this.Machine = machineNode; this.State = stateNode; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal TypeofRewriter(IPSharpProgram program) : base(program) { this.CurrentAllQualifiedStateNames = new HashSet <string>(); this.CurrentQualifiedStateName = new List <string>(); this.RewrittenQualifiedMethods = new HashSet <QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal NamespaceDeclaration(IPSharpProgram program) : base(program) { this.IdentifierTokens = new List<Token>(); this.EventDeclarations = new List<EventDeclaration>(); this.MachineDeclarations = new List<MachineDeclaration>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal EventDeclaration(IPSharpProgram program) : base(program) { this.GenericType = new List <Token>(); this.PayloadTypes = new List <Token>(); this.PayloadIdentifiers = new List <Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="node">BlockSyntax</param> internal ExpressionNode(IPSharpProgram program, BlockSyntax node) : base(program) { this.Parent = node; this.StmtTokens = new List <Token>(); this.RewrittenStmtTokens = new List <Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal TypeofRewriter(IPSharpProgram program) : base(program) { this.CurrentAllQualifiedStateNames = new HashSet<string>(); this.CurrentQualifiedStateName = new List<string>(); this.RewrittenQualifiedMethods = new HashSet<QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="node">Node</param> internal ExpressionNode(IPSharpProgram program, BlockSyntax node) : base(program, node.IsModel) { this.Parent = node; this.StmtTokens = new List<Token>(); this.RewrittenStmtTokens = new List<Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal NamespaceDeclaration(IPSharpProgram program) : base(program, false) { this.IdentifierTokens = new List <Token>(); this.EventDeclarations = new List <EventDeclaration>(); this.MachineDeclarations = new List <MachineDeclaration>(); }
/// <summary> /// Rewrites a P# or P program to C#. /// </summary> /// <param name="program">Program</param> /// <param name="tree">SyntaxTree</param> private void RewriteProgram(IPSharpProgram program, SyntaxTree tree) { program.Rewrite(); var project = ProgramInfo.GetProjectWithName(this.Name); ProgramInfo.ReplaceSyntaxTree(program.GetSyntaxTree(), project); }
/// <summary> /// Rewrites a P# or P program to C#. /// </summary> /// <param name="program">Program</param> /// <param name="tree">SyntaxTree</param> private void RewriteProgram(IPSharpProgram program, SyntaxTree tree) { program.Rewrite(); var project = this.CompilationContext.GetProjectWithName(this.Name); this.CompilationContext.ReplaceSyntaxTree(program.GetSyntaxTree(), project); }
/// <summary> /// Rewrites a P# or P program to C#. /// </summary> /// <param name="program">Program</param> /// <param name="tree">SyntaxTree</param> private void RewriteProgram(IPSharpProgram program, SyntaxTree tree) { program.Rewrite(); var project = this.Project; ProgramInfo.ReplaceSyntaxTree(program.GetSyntaxTree(), ref project); this.Project = project; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> internal StateGroupDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.StateDeclarations = new List <StateDeclaration>(); this.StateGroupDeclarations = new List <StateGroupDeclaration>(); }
/// <summary> /// Initializes a new instance of the <see cref="EventDeclaration"/> class. /// </summary> internal EventDeclaration(IPSharpProgram program, MachineDeclaration machineNode, ModifierSet modSet) : base(program) { this.Machine = machineNode; this.AccessModifier = modSet.AccessModifier; this.GenericType = new List <Token>(); this.PayloadTypes = new List <Token>(); this.PayloadIdentifiers = new List <Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="isPSharp">Is P# machine</param> /// <param name="isMain">Is main machine</param> /// <param name="isModel">Is a model</param> /// <param name="isMonitor">Is a monitor</param> internal MachineDeclaration(IPSharpProgram program, bool isMain, bool isModel, bool isMonitor) : base(program, isModel) { this.IsMain = isMain; this.IsMonitor = isMonitor; this.BaseNameTokens = new List <Token>(); this.FieldDeclarations = new List <FieldDeclaration>(); this.StateDeclarations = new List <StateDeclaration>(); this.MethodDeclarations = new List <MethodDeclaration>(); this.FunctionDeclarations = new List <PFunctionDeclaration>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">PMachineDeclarationNode</param> /// <param name="isStart">Is start state</param> /// <param name="isModel">Is a model</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, bool isStart, bool isModel) : base(program, isModel) { this.IsStart = isStart; this.Machine = machineNode; this.GotoStateTransitions = new Dictionary <Token, Token>(); this.PushStateTransitions = new Dictionary <Token, Token>(); this.ActionBindings = new Dictionary <Token, Token>(); this.TransitionsOnExitActions = new Dictionary <Token, BlockSyntax>(); this.ActionHandlers = new Dictionary <Token, BlockSyntax>(); this.DeferredEvents = new HashSet <Token>(); this.IgnoredEvents = new HashSet <Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="namespaceNode">NamespaceDeclaration</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="isPartial">Is partial</param> internal MachineDeclaration(IPSharpProgram program, NamespaceDeclaration namespaceNode, bool isMonitor, bool isPartial) : base(program) { this.Namespace = namespaceNode; this.IsMonitor = isMonitor; this.IsPartial = isPartial; this.BaseNameTokens = new List <Token>(); this.FieldDeclarations = new List <FieldDeclaration>(); this.StateDeclarations = new List <StateDeclaration>(); this.StateGroupDeclarations = new List <StateGroupDeclaration>(); this.MethodDeclarations = new List <MethodDeclaration>(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="namespaceNode">NamespaceDeclaration</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="modSet">Modifier set</param> internal MachineDeclaration(IPSharpProgram program, NamespaceDeclaration namespaceNode, bool isMonitor, ModifierSet modSet) : base(program) { this.Namespace = namespaceNode; this.IsMonitor = isMonitor; this.AccessModifier = modSet.AccessModifier; this.InheritanceModifier = modSet.InheritanceModifier; this.IsPartial = modSet.IsPartial; this.BaseNameTokens = new List <Token>(); this.EventDeclarations = new EventDeclarations(); this.FieldDeclarations = new List <FieldDeclaration>(); this.StateDeclarations = new List <StateDeclaration>(); this.StateGroupDeclarations = new List <StateGroupDeclaration>(); this.MethodDeclarations = new List <MethodDeclaration>(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> /// <param name="isStart">Is start state</param> /// <param name="isHot">Is hot state</param> /// <param name="isCold">Is cold state</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode, bool isStart, bool isHot, bool isCold) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.IsStart = isStart; this.IsHot = isHot; this.IsCold = isCold; this.GotoStateTransitions = new Dictionary <Token, List <Token> >(); this.PushStateTransitions = new Dictionary <Token, List <Token> >(); this.ActionBindings = new Dictionary <Token, Token>(); this.TransitionsOnExitActions = new Dictionary <Token, BlockSyntax>(); this.ActionHandlers = new Dictionary <Token, BlockSyntax>(); this.DeferredEvents = new HashSet <Token>(); this.IgnoredEvents = new HashSet <Token>(); this.ResolvedEventIdentifierTokens = new Dictionary <Token, Tuple <List <Token>, int> >(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> /// <param name="modSet">Modifier set</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode, ModifierSet modSet) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.AccessModifier = modSet.AccessModifier; this.IsStart = modSet.IsStart; this.IsHot = modSet.IsHot; this.IsCold = modSet.IsCold; this.GotoStateTransitions = new Dictionary <Token, List <Token> >(); this.PushStateTransitions = new Dictionary <Token, List <Token> >(); this.ActionBindings = new Dictionary <Token, Token>(); this.TransitionsOnExitActions = new Dictionary <Token, AnonymousActionHandler>(); this.ActionHandlers = new Dictionary <Token, AnonymousActionHandler>(); this.DeferredEvents = new HashSet <Token>(); this.IgnoredEvents = new HashSet <Token>(); this.ResolvedEventIdentifierTokens = new Dictionary <Token, Tuple <List <Token>, int> >(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); }
/// <summary> /// Returns a P# program. /// </summary> /// <param name="tokens">List of tokens</param> /// <returns>P# program</returns> public IPSharpProgram ParseTokens(List <Token> tokens) { this.OriginalTokens = tokens.ToList(); this.TokenStream = new TokenStream(tokens); this.Program = this.CreateNewProgram(); this.ExpectedTokenTypes = new List <TokenType>(); this.ParsingErrorLog = ""; try { this.ParseTokens(); } catch (ParsingException ex) { this.ParsingErrorLog = ex.Message; this.ReportParsingError(); this.ExpectedTokenTypes = ex.ExpectedTokenTypes; } return(this.Program); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> /// <param name="modSet">Modifier set</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode, ModifierSet modSet) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.AccessModifier = modSet.AccessModifier; this.IsStart = modSet.IsStart; this.IsHot = modSet.IsHot; this.IsCold = modSet.IsCold; this.IsAbstract = modSet.InheritanceModifier == InheritanceModifier.Abstract; this.GotoStateTransitions = new Dictionary <Token, List <Token> >(); this.PushStateTransitions = new Dictionary <Token, List <Token> >(); this.ActionBindings = new Dictionary <Token, Token>(); this.TransitionsOnExitActions = new Dictionary <Token, AnonymousActionHandler>(); this.ActionHandlers = new Dictionary <Token, AnonymousActionHandler>(); this.DeferredEvents = new HashSet <Token>(); this.IgnoredEvents = new HashSet <Token>(); this.ResolvedEventIdentifierTokens = new Dictionary <Token, Tuple <List <Token>, int> >(); this.RewrittenMethods = new HashSet <QualifiedMethod>(); this.isNameofSupported = base.Program.GetProject().CompilationContext.Configuration.IsRewriteCSharpVersion(6, 0); }
/// <summary> /// Constructor /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">PMachineDeclarationNode</param> /// <param name="isModel">Is a model</param> internal PFieldDeclaration(IPSharpProgram program, MachineDeclaration machineNode, bool isModel) : base(program, machineNode, isModel) { }
/// <summary> /// Initializes a new instance of the <see cref="PushStateRewriter"/> class. /// </summary> internal PushStateRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="node">Node</param> internal PExpressionNode(IPSharpProgram program, BlockSyntax node) : base(program, node) { this.Payloads = new List <PPayloadReceiveNode>(); this.PendingPayloads = new List <PPayloadReceiveNode>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal PopRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="isModel">Is a model</param> internal PFunctionDeclaration(IPSharpProgram program, bool isModel) : base(program, isModel) { this.Parameters = new List<Token>(); this.ParameterTypes = new List<PBaseType>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal UsingDeclaration(IPSharpProgram program) : base(program, false) { this.IdentifierTokens = new List<Token>(); }
/// <summary> /// Initializes a new instance of the <see cref="MonitorRewriter"/> class. /// </summary> internal MonitorRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> protected PSharpRewriter(IPSharpProgram program) { this.Program = program; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="stateNode">StateDeclaration</param> internal ExitDeclaration(IPSharpProgram program, StateDeclaration stateNode) : base(program) { this.State = stateNode; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal AssertRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Returns a P# program. /// </summary> /// <param name="tokens">List of tokens</param> /// <returns>P# program</returns> public IPSharpProgram ParseTokens(List<Token> tokens) { this.OriginalTokens = tokens.ToList(); this.TokenStream = new TokenStream(tokens); this.Program = this.CreateNewProgram(); this.ExpectedTokenTypes = new List<TokenType>(); this.ParsingErrorLog = ""; try { this.ParseTokens(); } catch (ParsingException ex) { this.ParsingErrorLog = ex.Message; this.ReportParsingError(); this.ExpectedTokenTypes = ex.ExpectedTokenTypes; } return this.Program; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">PMachineDeclarationNode</param> /// <param name="isStart">Is start state</param> /// <param name="isModel">Is a model</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, bool isStart, bool isModel) : base(program, isModel) { this.IsStart = isStart; this.Machine = machineNode; this.GotoStateTransitions = new Dictionary<Token, Token>(); this.PushStateTransitions = new Dictionary<Token, Token>(); this.ActionBindings = new Dictionary<Token, Token>(); this.TransitionsOnExitActions = new Dictionary<Token, BlockSyntax>(); this.ActionHandlers = new Dictionary<Token, BlockSyntax>(); this.DeferredEvents = new HashSet<Token>(); this.IgnoredEvents = new HashSet<Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="isModel">Is a model</param> protected PSharpSyntaxNode(IPSharpProgram program, bool isModel) { this.Program = program; this.IsModel = isModel; }
/// <summary> /// Rewrites a P# program to C#. /// </summary> /// <param name="program">Program</param> /// <param name="tree">SyntaxTree</param> private void RewriteProgram(IPSharpProgram program, SyntaxTree tree) { program.Rewrite(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal SendRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal CurrentStateRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="isModel">Is a model</param> internal EntryDeclaration(IPSharpProgram program, bool isModel) : base(program, isModel) { }
/// <summary> /// Initializes a new instance of the <see cref="RandomChoiceRewriter"/> class. /// </summary> internal RandomChoiceRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> internal FieldDeclaration(IPSharpProgram program, MachineDeclaration machineNode) : base(program) { this.Machine = machineNode; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal UsingDeclaration(IPSharpProgram program) : base(program, false) { this.IdentifierTokens = new List <Token>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> internal StateGroupDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.StateDeclarations = new List<StateDeclaration>(); this.StateGroupDeclarations = new List<StateGroupDeclaration>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="node">Node</param> internal PExpressionNode(IPSharpProgram program, BlockSyntax node) : base(program, node) { this.Payloads = new List<PPayloadReceiveNode>(); this.PendingPayloads = new List<PPayloadReceiveNode>(); }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="program">Program</param> /// <param name="parentNode">Node</param> /// <param name="accMod">Access modifier</param> internal void Visit(IPSharpProgram program, NamespaceDeclaration parentNode, AccessModifier accMod) { var node = new EventDeclaration(base.TokenStream.Program); node.AccessModifier = accMod; node.EventKeyword = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Identifier && base.TokenStream.Peek().Type != TokenType.HaltEvent && base.TokenStream.Peek().Type != TokenType.DefaultEvent)) { throw new ParsingException("Expected event identifier.", new List <TokenType> { TokenType.Identifier, TokenType.HaltEvent, TokenType.DefaultEvent }); } if (base.TokenStream.Peek().Type == TokenType.Identifier) { base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.EventIdentifier)); } node.Identifier = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Assert && base.TokenStream.Peek().Type != TokenType.Assume && base.TokenStream.Peek().Type != TokenType.Colon && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \":\" or \";\".", new List <TokenType> { TokenType.Assert, TokenType.Assume, TokenType.Colon, TokenType.Semicolon }); } if (base.TokenStream.Peek().Type == TokenType.Assert || base.TokenStream.Peek().Type == TokenType.Assume) { bool isAssert = true; if (base.TokenStream.Peek().Type == TokenType.Assert) { node.AssertKeyword = base.TokenStream.Peek(); } else { node.AssumeKeyword = base.TokenStream.Peek(); isAssert = false; } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected integer.", new List <TokenType> { TokenType.Identifier }); } int value; if (!int.TryParse(base.TokenStream.Peek().TextUnit.Text, out value)) { throw new ParsingException("Expected integer.", new List <TokenType> { TokenType.Identifier }); } if (isAssert) { node.AssertValue = value; } else { node.AssumeValue = value; } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Colon && base.TokenStream.Peek().Type != TokenType.Semicolon)) { throw new ParsingException("Expected \":\" or \";\".", new List <TokenType> { TokenType.Colon, TokenType.Semicolon }); } } if (base.TokenStream.Peek().Type == TokenType.Colon) { node.ColonToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); PBaseType payloadType = null; new TypeIdentifierVisitor(base.TokenStream).Visit(ref payloadType); node.PayloadType = payloadType; } if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Semicolon) { throw new ParsingException("Expected \";\".", new List <TokenType> { TokenType.Semicolon }); } node.SemicolonToken = base.TokenStream.Peek(); if (base.TokenStream.Program is PSharpProgram) { parentNode.EventDeclarations.Add(node); } else { (program as PProgram).EventDeclarations.Add(node); } }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal RaiseRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Initializes a new instance of the <see cref="MachineTypeRewriter"/> class. /// </summary> internal MachineTypeRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal FairRandomRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal CreateRemoteMachineRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="groupNode">StateGroupDeclaration</param> /// <param name="isStart">Is start state</param> /// <param name="isHot">Is hot state</param> /// <param name="isCold">Is cold state</param> internal StateDeclaration(IPSharpProgram program, MachineDeclaration machineNode, StateGroupDeclaration groupNode, bool isStart, bool isHot, bool isCold) : base(program) { this.Machine = machineNode; this.Group = groupNode; this.IsStart = isStart; this.IsHot = isHot; this.IsCold = isCold; this.GotoStateTransitions = new Dictionary<Token, List<Token>>(); this.PushStateTransitions = new Dictionary<Token, List<Token>>(); this.ActionBindings = new Dictionary<Token, Token>(); this.TransitionsOnExitActions = new Dictionary<Token, BlockSyntax>(); this.ActionHandlers = new Dictionary<Token, BlockSyntax>(); this.DeferredEvents = new HashSet<Token>(); this.IgnoredEvents = new HashSet<Token>(); this.ResolvedEventIdentifierTokens = new Dictionary<Token, Tuple<List<Token>, int>>(); this.RewrittenMethods = new HashSet<QualifiedMethod>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal GotoStateRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal RandomChoiceRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> internal MethodDeclaration(IPSharpProgram program, MachineDeclaration machineNode) : base(program) { this.Parameters = new List<Token>(); this.Machine = machineNode; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> internal MonitorRewriter(IPSharpProgram program) : base(program) { }
/// <summary> /// Constructor /// </summary> /// <param name="program">Program</param> /// <param name="machineNode">MachineDeclarationNode</param> /// <param name="isModel">Is a model</param> internal FieldDeclaration(IPSharpProgram program, MachineDeclaration machineNode, bool isModel) : base(program, isModel) { this.Machine = machineNode; }
/// <summary> /// Visits the syntax node. /// </summary> /// <param name="program">Program</param> /// <param name="parentNode">Node</param> /// <param name="isMonitor">Is a monitor</param> /// <param name="isPartial">Is partial</param> /// <param name="accMod">Access modifier</param> /// <param name="inhMod">Inheritance modifier</param> internal void Visit(IPSharpProgram program, NamespaceDeclaration parentNode, bool isMonitor, bool isPartial, AccessModifier accMod, InheritanceModifier inhMod) { var node = new MachineDeclaration(base.TokenStream.Program, parentNode, isMonitor, isPartial); node.AccessModifier = accMod; node.InheritanceModifier = inhMod; node.MachineKeyword = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected machine identifier.", new List<TokenType> { TokenType.Identifier }); } base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineIdentifier)); node.Identifier = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Program is PSharpProgram) { if (base.TokenStream.Done || (base.TokenStream.Peek().Type != TokenType.Colon && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket)) { throw new ParsingException("Expected \":\" or \"{\".", new List<TokenType> { TokenType.Colon, TokenType.LeftCurlyBracket }); } if (base.TokenStream.Peek().Type == TokenType.Colon) { node.ColonToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.Identifier) { throw new ParsingException("Expected base machine identifier.", new List<TokenType> { TokenType.Identifier }); } while (!base.TokenStream.Done && base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { if (base.TokenStream.Peek().Type != TokenType.Identifier && base.TokenStream.Peek().Type != TokenType.Dot && base.TokenStream.Peek().Type != TokenType.NewLine) { throw new ParsingException("Expected base machine identifier.", new List<TokenType> { TokenType.Identifier, TokenType.Dot }); } else { node.BaseNameTokens.Add(base.TokenStream.Peek()); } base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); } } } if (base.TokenStream.Done || base.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { throw new ParsingException("Expected \"{\".", new List<TokenType> { TokenType.LeftCurlyBracket }); } base.TokenStream.Swap(new Token(base.TokenStream.Peek().TextUnit, TokenType.MachineLeftCurlyBracket)); node.LeftCurlyBracketToken = base.TokenStream.Peek(); base.TokenStream.Index++; base.TokenStream.SkipWhiteSpaceAndCommentTokens(); this.VisitNextPSharpIntraMachineDeclaration(node); parentNode.MachineDeclarations.Add(node); var stateDeclarations = node.GetAllStateDeclarations(); if (stateDeclarations.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare at least one state.", new List<TokenType>()); } var startStates = stateDeclarations.FindAll(s => s.IsStart); if (startStates.Count == 0 && node.BaseNameTokens.Count == 0) { throw new ParsingException("A machine must declare a start state.", new List<TokenType>()); } else if (startStates.Count > 1) { throw new ParsingException("A machine can declare only a single start state.", new List<TokenType>()); } }
/// <summary> /// Constructor. /// </summary> /// <param name="program">IPSharpProgram</param> protected CSharpRewriter(IPSharpProgram program) { this.Program = program; }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> /// <param name="isPSharp">Is P# machine</param> /// <param name="isMain">Is main machine</param> /// <param name="isModel">Is a model</param> /// <param name="isMonitor">Is a monitor</param> internal MachineDeclaration(IPSharpProgram program, bool isMain, bool isModel, bool isMonitor) : base(program, isModel) { this.IsMain = isMain; this.IsMonitor = isMonitor; this.BaseNameTokens = new List<Token>(); this.FieldDeclarations = new List<FieldDeclaration>(); this.StateDeclarations = new List<StateDeclaration>(); this.MethodDeclarations = new List<MethodDeclaration>(); this.FunctionDeclarations = new List<PFunctionDeclaration>(); }
/// <summary> /// Constructor. /// </summary> /// <param name="program">Program</param> internal EventDeclaration(IPSharpProgram program) : base(program, false) { }