|
|
|
@ -44,12 +44,14 @@ type Scanner struct { |
|
|
|
curCh rune |
|
|
|
newline bool |
|
|
|
reader *bufio.Reader |
|
|
|
freader io.Reader |
|
|
|
} |
|
|
|
|
|
|
|
// NewScanner creates and initializes a new *Scanner from an io.Readerx
|
|
|
|
func NewScanner(reader io.Reader) *Scanner { |
|
|
|
scanner := &Scanner{ |
|
|
|
reader: bufio.NewReader(reader), |
|
|
|
freader: reader, |
|
|
|
curLine: 0, |
|
|
|
curCol: 0, |
|
|
|
newline: false, |
|
|
|
@ -207,6 +209,9 @@ func (scanner *Scanner) NextToken() token.Token { |
|
|
|
case ch == eof: |
|
|
|
scanner.curTok.ID = token.EOF |
|
|
|
scanner.curTok.Literal = "EOF" |
|
|
|
if f, ok := scanner.freader.(io.Closer); ok { |
|
|
|
_ = f.Close() |
|
|
|
} |
|
|
|
default: |
|
|
|
scanner.readRune() |
|
|
|
scanner.curTok.Literal = string(ch) |
|
|
|
|