aboutsummaryrefslogtreecommitdiff
path: root/driver/token_stream.go
diff options
context:
space:
mode:
authorRyo Nihei <nihei.dev@gmail.com>2022-11-06 21:31:46 +0900
committerRyo Nihei <nihei.dev@gmail.com>2022-11-10 00:40:16 +0900
commitf89d021bbe134e3efa0d015a41e9712960cdd009 (patch)
tree28c6d49611f09dad186b0f6fc4c1a42864a2f7cb /driver/token_stream.go
parentSplit SymbolTable's APIs into reader/writer (diff)
downloadcotia-f89d021bbe134e3efa0d015a41e9712960cdd009.tar.gz
cotia-f89d021bbe134e3efa0d015a41e9712960cdd009.tar.xz
Import source code of lexer generator
From: https://github.com/nihei9/maleeni
Diffstat (limited to 'driver/token_stream.go')
-rw-r--r--driver/token_stream.go61
1 files changed, 0 insertions, 61 deletions
diff --git a/driver/token_stream.go b/driver/token_stream.go
deleted file mode 100644
index eaf56c6..0000000
--- a/driver/token_stream.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package driver
-
-import (
- "io"
-
- mldriver "github.com/nihei9/maleeni/driver"
- spec "github.com/nihei9/vartan/spec/grammar"
-)
-
-type vToken struct {
- terminalID int
- tok *mldriver.Token
-}
-
-func (t *vToken) TerminalID() int {
- return t.terminalID
-}
-
-func (t *vToken) Lexeme() []byte {
- return t.tok.Lexeme
-}
-
-func (t *vToken) EOF() bool {
- return t.tok.EOF
-}
-
-func (t *vToken) Invalid() bool {
- return t.tok.Invalid
-}
-
-func (t *vToken) Position() (int, int) {
- return t.tok.Row, t.tok.Col
-}
-
-type tokenStream struct {
- lex *mldriver.Lexer
- kindToTerminal []int
-}
-
-func NewTokenStream(g *spec.CompiledGrammar, src io.Reader) (TokenStream, error) {
- lex, err := mldriver.NewLexer(mldriver.NewLexSpec(g.LexicalSpecification.Maleeni.Spec), src)
- if err != nil {
- return nil, err
- }
-
- return &tokenStream{
- lex: lex,
- kindToTerminal: g.LexicalSpecification.Maleeni.KindToTerminal,
- }, nil
-}
-
-func (l *tokenStream) Next() (VToken, error) {
- tok, err := l.lex.Next()
- if err != nil {
- return nil, err
- }
- return &vToken{
- terminalID: l.kindToTerminal[tok.KindID],
- tok: tok,
- }, nil
-}