/// <summary> /// Visits the syntax node. /// </summary> /// <param name="parentNode">Node</param> internal void Visit(StateDeclaration parentNode) { if (parentNode.EntryDeclaration != null) { throw new ParsingException("Duplicate entry declaration.", new List <TokenType>()); } var node = new EntryDeclaration(base.TokenStream.Program, parentNode.IsModel); node.EntryKeyword = 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 }); } var blockNode = new BlockSyntax(base.TokenStream.Program, parentNode.Machine, parentNode, node.IsModel); new BlockSyntaxVisitor(base.TokenStream).Visit(blockNode); node.StatementBlock = blockNode; parentNode.EntryDeclaration = node; }
/// <summary> /// Visits the syntax node. /// </summary> internal void Visit(StateDeclaration parentNode, TokenRange tokenRange, bool isAsync = false) { if (parentNode.EntryDeclaration != null) { throw new ParsingException("Duplicate entry declaration.", this.TokenStream.Peek()); } var node = new EntryDeclaration(this.TokenStream.Program, parentNode, isAsync); node.EntryKeyword = this.TokenStream.Peek(); node.HeaderTokenRange = tokenRange.FinishAndClone(); this.TokenStream.Index++; this.TokenStream.SkipWhiteSpaceAndCommentTokens(); if (this.TokenStream.Done || this.TokenStream.Peek().Type != TokenType.LeftCurlyBracket) { throw new ParsingException("Expected \"{\".", this.TokenStream.Peek(), TokenType.LeftCurlyBracket); } var blockNode = new BlockSyntax(this.TokenStream.Program, parentNode.Machine, parentNode); new BlockSyntaxVisitor(this.TokenStream).Visit(blockNode); node.StatementBlock = blockNode; parentNode.EntryDeclaration = node; }