Further normalize expectation responsibilities of parsing methods

This commit is contained in:
Sasha Koshka 2024-02-06 16:39:15 -05:00
parent befb178291
commit c0ca9108e7
2 changed files with 13 additions and 11 deletions

View File

@ -101,12 +101,6 @@ func (this *Parser) parse () error {
err := this.next() err := this.next()
if err != nil { return err } if err != nil { return err }
for { for {
err = this.expectDesc (
descriptionTopLevel,
startTokensTopLevel...)
if err != nil { return err }
if this.token.EOF() { return nil }
err = this.parseTopLevel() err = this.parseTopLevel()
if err != nil { return err } if err != nil { return err }
} }

View File

@ -13,7 +13,12 @@ var startTokensTopLevel = []lexer.TokenKind {
} }
func (this *Parser) parseTopLevel () error { func (this *Parser) parseTopLevel () error {
var err error err := this.expectDesc (
descriptionTopLevel,
startTokensTopLevel...)
if err != nil { return err }
if this.token.EOF() { return nil }
access := entity.AccessPrivate access := entity.AccessPrivate
if this.token.Kind == lexer.Symbol { if this.token.Kind == lexer.Symbol {
access, err = this.parseAccess() access, err = this.parseAccess()
@ -60,13 +65,18 @@ func (this *Parser) parseTopLevel () error {
} }
func (this *Parser) parseAccess () (entity.Access, error) { func (this *Parser) parseAccess () (entity.Access, error) {
err := this.expectValueDesc (
"Access control specifier",
lexer.Symbol, "-", "~", "+")
if err != nil { return 0, err }
switch this.token.Value { switch this.token.Value {
case "-": return entity.AccessPrivate, nil case "-": return entity.AccessPrivate, nil
case "~": return entity.AccessRestricted, nil case "~": return entity.AccessRestricted, nil
case "+": return entity.AccessPublic, nil case "+": return entity.AccessPublic, nil
default : return 0, errors.Errorf ( default : return 0, errors.Errorf (
this.token.Position, this.token.Position,
"unrecognized access symbol") "unrecognized access control specifier")
} }
} }
@ -125,8 +135,6 @@ func (this *Parser) parseMethodCore (access entity.Access, typeName string) (*en
} }
func (this *Parser) parseTypedefCore (access entity.Access, typeName string) (*entity.Typedef, error) { func (this *Parser) parseTypedefCore (access entity.Access, typeName string) (*entity.Typedef, error) {
err := this.expectDesc(descriptionType, startTokensType...)
if err != nil { return nil, err }
ty, err := this.parseType() ty, err := this.parseType()
if err != nil { return nil, err } if err != nil { return nil, err }
return &entity.Typedef { return &entity.Typedef {