Beispiel #1
0
 /// <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;
 }
Beispiel #2
0
 /// <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>();
 }
Beispiel #4
0
 /// <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>();
 }
Beispiel #5
0
 /// <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>();
 }
Beispiel #6
0
 /// <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;
 }
Beispiel #7
0
 /// <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>();
 }
Beispiel #8
0
 /// <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>();
 }
Beispiel #9
0
 /// <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>();
 }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #12
0
        /// <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;
        }
Beispiel #13
0
 /// <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>();
 }
Beispiel #14
0
 /// <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>();
 }
Beispiel #17
0
 /// <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>();
 }
Beispiel #18
0
 /// <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>();
 }
Beispiel #19
0
 /// <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>();
 }
Beispiel #20
0
 /// <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>();
 }
Beispiel #21
0
        /// <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);
        }
Beispiel #22
0
 /// <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)
 {
 }
Beispiel #24
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PushStateRewriter"/> class.
 /// </summary>
 internal PushStateRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #25
0
 /// <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>();
 }
Beispiel #26
0
 /// <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>();
 }
Beispiel #28
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">Program</param>
 internal UsingDeclaration(IPSharpProgram program)
     : base(program, false)
 {
     this.IdentifierTokens = new List<Token>();
 }
Beispiel #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MonitorRewriter"/> class.
 /// </summary>
 internal MonitorRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #30
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 protected PSharpRewriter(IPSharpProgram program)
 {
     this.Program = program;
 }
Beispiel #31
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">Program</param>
 /// <param name="stateNode">StateDeclaration</param>
 internal ExitDeclaration(IPSharpProgram program, StateDeclaration stateNode)
     : base(program)
 {
     this.State = stateNode;
 }
Beispiel #32
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal AssertRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #33
0
        /// <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;
        }
Beispiel #34
0
 /// <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>();
 }
Beispiel #35
0
 /// <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;
 }
Beispiel #36
0
 /// <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();
 }
Beispiel #37
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal SendRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #38
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal CurrentStateRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #39
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="program">Program</param>
        /// <param name="isModel">Is a model</param>
        internal EntryDeclaration(IPSharpProgram program, bool isModel)
            : base(program, isModel)
        {

        }
Beispiel #40
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RandomChoiceRewriter"/> class.
 /// </summary>
 internal RandomChoiceRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #41
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="program">Program</param>
 /// <param name="machineNode">MachineDeclarationNode</param>
 internal FieldDeclaration(IPSharpProgram program, MachineDeclaration machineNode)
     : base(program)
 {
     this.Machine = machineNode;
 }
Beispiel #42
0
 /// <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>();
 }
Beispiel #44
0
 /// <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);
            }
        }
Beispiel #46
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal RaiseRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #47
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MachineTypeRewriter"/> class.
 /// </summary>
 internal MachineTypeRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #48
0
 /// <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)
 {
 }
Beispiel #50
0
 /// <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>();
 }
Beispiel #51
0
 /// <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)
 {
 }
Beispiel #53
0
 /// <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;
 }
Beispiel #54
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal MonitorRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #55
0
 /// <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>());
            }
        }
Beispiel #57
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 protected CSharpRewriter(IPSharpProgram program)
 {
     this.Program = program;
 }
Beispiel #58
0
 /// <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>();
 }
Beispiel #59
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">IPSharpProgram</param>
 internal GotoStateRewriter(IPSharpProgram program)
     : base(program)
 {
 }
Beispiel #60
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="program">Program</param>
 internal EventDeclaration(IPSharpProgram program)
     : base(program, false)
 {
 }