MCPcopy Create free account
hub / github.com/delinoio/oss / parseModule

Method parseModule

cmds/ttlc/internal/parser/parser.go:26–68  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

24}
25
26func (p *Parser) parseModule() *ast.Module {
27 module := &ast.Module{}
28 if !p.match(lexer.TokenKeywordPackage) {
29 p.addCurrentSyntaxError(messages.FormatDiagnostic(messages.DiagnosticModuleMustStartWithPackage))
30 return module
31 }
32 packageName, ok := p.expectIdentifier(messages.FormatDiagnostic(messages.DiagnosticExpectedPackageName))
33 if ok {
34 module.PackageName = packageName
35 }
36
37 for !p.check(lexer.TokenEOF) {
38 switch p.current().Kind {
39 case lexer.TokenSemicolon:
40 p.advance()
41 case lexer.TokenKeywordImport:
42 module.Imports = append(module.Imports, p.parseImportDecls()...)
43 case lexer.TokenKeywordType:
44 declaration := p.parseTypeDecl()
45 if declaration != nil {
46 module.Decls = append(module.Decls, declaration)
47 }
48 case lexer.TokenKeywordTask:
49 declaration := p.parseTaskDecl()
50 if declaration != nil {
51 module.Decls = append(module.Decls, declaration)
52 }
53 case lexer.TokenKeywordFunc:
54 declaration := p.parseFuncDecl()
55 if declaration != nil {
56 module.Decls = append(module.Decls, declaration)
57 }
58 default:
59 p.addCurrentSyntaxError(messages.FormatDiagnostic(messages.DiagnosticUnsupportedTopLevelDeclaration))
60 p.synchronizeTopLevel()
61 }
62 }
63
64 if len(p.tokens) > 0 {
65 module.Span = spanFromTokenRange(p.tokens[0], p.tokens[len(p.tokens)-1])
66 }
67 return module
68}
69
70func (p *Parser) parseImportDecls() []ast.ImportDecl {
71 start := p.advance()

Callers 1

ParseFunction · 0.95

Calls 13

matchMethod · 0.95
addCurrentSyntaxErrorMethod · 0.95
expectIdentifierMethod · 0.95
checkMethod · 0.95
currentMethod · 0.95
advanceMethod · 0.95
parseImportDeclsMethod · 0.95
parseTypeDeclMethod · 0.95
parseTaskDeclMethod · 0.95
parseFuncDeclMethod · 0.95
synchronizeTopLevelMethod · 0.95
FormatDiagnosticFunction · 0.92

Tested by

no test coverage detected