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