refactor parse phase - finalize

This commit is contained in:
Arpad Ryszka 2017-11-02 22:55:19 +01:00
parent 223b868cf0
commit 930fb9f449
2 changed files with 9 additions and 10 deletions

View File

@ -29,7 +29,7 @@ func (c *context) read() bool {
return false return false
} }
t, n, err := c.reader.ReadRune() token, n, err := c.reader.ReadRune()
if err != nil { if err != nil {
if err == io.EOF { if err == io.EOF {
if n == 0 { if n == 0 {
@ -44,12 +44,12 @@ func (c *context) read() bool {
c.readOffset++ c.readOffset++
if t == unicode.ReplacementChar { if token == unicode.ReplacementChar {
c.readErr = ErrInvalidUnicodeCharacter c.readErr = ErrInvalidUnicodeCharacter
return false return false
} }
c.tokens = append(c.tokens, t) c.tokens = append(c.tokens, token)
return true return true
} }
@ -133,8 +133,11 @@ func (c *context) fail(offset int) {
c.matchLast = false c.matchLast = false
} }
func (c *context) finalize(root parser) error { func (c *context) finalizeParse(rootID int) error {
rootID := root.nodeID() if !c.matchLast {
return ErrInvalidInput
}
to, match, found := c.results.getMatch(0, rootID) to, match, found := c.results.getMatch(0, rootID)
if !found || !match || to < c.readOffset { if !found || !match || to < c.readOffset {
return ErrUnexpectedCharacter return ErrUnexpectedCharacter

View File

@ -313,11 +313,7 @@ func (s *Syntax) Parse(r io.Reader) (*Node, error) {
return nil, c.readErr return nil, c.readErr
} }
if !c.matchLast { if err := c.finalizeParse(s.parser.nodeID()); err != nil {
return nil, ErrInvalidInput
}
if err := c.finalize(s.parser); err != nil {
return nil, err return nil, err
} }