this repo has no description
www.jonmsterling.com/01HC/
1// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers
2//
3// SPDX-License-Identifier: MPL-2.0
4
5import Foundation
6
7enum Declaration: Grammar {
8 enum Kinds {
9 static let claim = SyntaxTreeKind(name: "decl.claim")
10 static let refine = SyntaxTreeKind(name: "decl.refine")
11 static let define = SyntaxTreeKind(name: "decl.define")
12 }
13
14 static let kinds = [Kinds.claim, Kinds.refine, Kinds.define]
15
16 static func precondition(_ parser: inout Parser) -> Bool {
17 Lhs.precondition(&parser)
18 }
19
20 static let punctuationMap: [Punctuation: SyntaxTreeKind] = [
21 .colon: Kinds.claim,
22 .doubleLeftArrow: Kinds.refine,
23 .doubleRightArrow: Kinds.define
24 ]
25
26 static func inside(_ parser: inout Parser, recovery: Set<TokenKind>) -> ParseResult {
27 let punctuations = punctuationMap.keys.map { TokenKind.punctuation($0) }
28 Lhs.parse(&parser, recovery: recovery.union(punctuations))
29 parser.eatTrivia()
30
31 var kind: SyntaxTreeKind = .error
32 for cell in punctuationMap {
33 if parser.eat(kind: .punctuation(cell.key), metadata: TokenMetadata(semanticTokenType: .operator)) {
34 kind = cell.value
35 break
36 }
37 }
38
39 if kind == .error {
40 parser.advance(error: "Expected one of \(punctuationMap.keys.map(\.rawValue)) in declaration")
41 }
42
43 parser.eatTrivia()
44 Rhs.parse(&parser, recovery: recovery)
45
46 return ParseResult(kind: kind)
47 }
48}
49
50extension SyntaxView<Declaration> {
51 var lhs: SyntaxView<Declaration.Lhs>? { matchingSubview() }
52 var rhs: SyntaxView<Declaration.Rhs>? { matchingSubview() }
53}