// class ::= "class" ident [ ":" ident ] class_block private SyntaxClassNode ParseClassNode() { if (!TokenStream_.TakeExpect(TokenType.Keyword, "class", out Token Tok)) { ExitCode_ = new ExitUnexpectedSymbolCode(Tok); return(null); } if (!TokenStream_.TakeExpect(TokenType.Identifier, out Token ClassName)) { ExitCode_ = new ExitUnexpectedSymbolCode(ClassName); return(null); } SyntaxIdentifierNode BaseClassIdentNode = null; if (TokenStream_.PeekExpect(TokenType.Delimiter, ":")) { // skip ":" TokenStream_.Take(); if (!TokenStream_.TakeExpect(TokenType.Identifier, out Token BaseName)) { ExitCode_ = new ExitUnexpectedSymbolCode(BaseName); return(null); } BaseClassIdentNode = new SyntaxIdentifierNode(BaseName); } var ClassBodyNode = ParseClassBodyNode(); if (ClassBodyNode == null) { return(null); } return(new SyntaxClassNode(ClassName.Code, ClassBodyNode, BaseClassIdentNode)); }
public SyntaxDotClassExpressionNode(SyntaxIdentifierNode ClassIdentNode, SyntaxIdentifierNode CallIdentNode) : base(new Token(TokenType.Operator, "."), ClassIdentNode, CallIdentNode) { }
public LiteValue Visit(SyntaxIdentifierNode Node, LiteEnv Env) { return(Env.Get(Node.GetValue())); }
public SyntaxClassNode(string ClassName, SyntaxClassBodyStatementNode BlockNode, SyntaxIdentifierNode BaseClassIdentNode) : base(BlockNode, BaseClassIdentNode) { ClassName_ = ClassName; }