refactor parse phase - finalize
This commit is contained in:
parent
223b868cf0
commit
930fb9f449
13
context.go
13
context.go
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user