Add dereference parsing #17

Merged
sashakoshka merged 7 commits from parse-dereferences into main 2022-10-11 11:37:40 -06:00
2 changed files with 23 additions and 3 deletions
Showing only changes of commit a7588f7416 - Show all commits

View File

@ -1,12 +1,32 @@
package parser
// import "git.tebibyte.media/arf/arf/lexer"
import "git.tebibyte.media/arf/arf/lexer"
// import "git.tebibyte.media/arf/arf/infoerr"
func (parser *ParsingOperation) parseDereference () (
dereference Dereference,
err error,
) {
// TODO
err = parser.expect(lexer.TokenKindLBrace)
if err != nil { return }
dereference.location = parser.token.Location()
// parse the value we are dereferencing
err = parser.nextToken(validArgumentStartTokens...)
if err != nil { return }
dereference.argument, err = parser.parseArgument()
if err != nil { return }
// if there is an offset, parse it
err = parser.expect(lexer.TokenKindUInt, lexer.TokenKindLBrace)
if err != nil { return }
if parser.token.Is(lexer.TokenKindUInt) {
dereference.offset = parser.token.Value().(uint64)
}
err = parser.nextToken(lexer.TokenKindLBrace)
if err != nil { return }
err = parser.nextToken()
if err != nil { return }
return
}

View File

@ -224,7 +224,7 @@ type Dereference struct {
valuable
// if a simple dereference was parsed, this should just be zero.
offset int
offset uint64
}
// PhraseKind determines what semantic role a phrase plays.