askl;d;sldkf

This commit is contained in:
Sasha Koshka 2024-02-06 02:55:39 -05:00
parent ac433f07ec
commit 4a2671c601
2 changed files with 23 additions and 4 deletions

View File

@ -71,14 +71,15 @@ func (this *Parser) next () (lexer.Token, error) {
return token, nil
}
func appendr[ELEMENT any] (item ELEMENT, array []ELEMENT) []ELEMENT {
return append([]ELEMENT { item }, array...)
}
func (this *Parser) parse () error {
for {
token, err := this.expectDesc (
descriptionTopLevel,
lexer.Symbol,
lexer.LBracket,
lexer.TypeIdent,
lexer.EOF)
startTokensTopLevel...)
if err != nil { return err }
if token.EOF() { return nil }

View File

@ -5,6 +5,12 @@ import "git.tebibyte.media/sashakoshka/fspl/errors"
import "git.tebibyte.media/sashakoshka/fspl/entity"
var descriptionTopLevel = "Typedef, Function, or Method"
var startTokensTopLevel = []lexer.TokenKind {
lexer.Symbol,
lexer.LBracket,
lexer.TypeIdent,
lexer.EOF,
}
func (this *Parser) parseTopLevel () error {
var err error
@ -62,6 +68,18 @@ func (this *Parser) parseAccess () (entity.Access, error) {
func (this *Parser) parseFunction (access entity.Access) error {
signature, err := this.parseSignature()
if err != nil { return err }
token, err := this.expectDesc (
"Function body, Link name, " + descriptionTopLevel,
appendr(lexer.Symbol, appendr(lexer.String, startTokensTopLevel))...)
if err != nil { return err }
switch token.Kind {
}
// TODO there will be a lot of code duplication between this and parseMethod
// if we keep continuing along this route, need only one function to parse
// both
}
func (this *Parser) parseMethod (access entity.Access, typeName string) error {