Go fmt em all
This commit is contained in:
parent
81068376fa
commit
3c14e17cb1
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
package errors
|
package errors
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/localhots/penny/token"
|
"github.com/localhots/penny/token"
|
||||||
|
|
444
lexer/acttab.go
444
lexer/acttab.go
|
@ -1,12 +1,11 @@
|
||||||
|
|
||||||
package lexer
|
package lexer
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/localhots/penny/token"
|
"github.com/localhots/penny/token"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ActionTable [NumStates] ActionRow
|
type ActionTable [NumStates]ActionRow
|
||||||
|
|
||||||
type ActionRow struct {
|
type ActionRow struct {
|
||||||
Accept token.Type
|
Accept token.Type
|
||||||
|
@ -18,297 +17,296 @@ func (this ActionRow) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
var ActTab = ActionTable{
|
var ActTab = ActionTable{
|
||||||
ActionRow{ // S0
|
ActionRow{ // S0
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S1
|
ActionRow{ // S1
|
||||||
Accept: -1,
|
Accept: -1,
|
||||||
Ignore: "!whitespace",
|
Ignore: "!whitespace",
|
||||||
},
|
},
|
||||||
ActionRow{ // S2
|
ActionRow{ // S2
|
||||||
Accept: 7,
|
Accept: 7,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S3
|
ActionRow{ // S3
|
||||||
Accept: 39,
|
Accept: 39,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S4
|
ActionRow{ // S4
|
||||||
Accept: 9,
|
Accept: 9,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S5
|
ActionRow{ // S5
|
||||||
Accept: 10,
|
Accept: 10,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S6
|
ActionRow{ // S6
|
||||||
Accept: 3,
|
Accept: 3,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S7
|
ActionRow{ // S7
|
||||||
Accept: 40,
|
Accept: 40,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S8
|
ActionRow{ // S8
|
||||||
Accept: 28,
|
Accept: 28,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S9
|
ActionRow{ // S9
|
||||||
Accept: 4,
|
Accept: 4,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S10
|
ActionRow{ // S10
|
||||||
Accept: 30,
|
Accept: 30,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S11
|
ActionRow{ // S11
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S12
|
ActionRow{ // S12
|
||||||
Accept: 13,
|
Accept: 13,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S13
|
ActionRow{ // S13
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S14
|
ActionRow{ // S14
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S15
|
ActionRow{ // S15
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S16
|
ActionRow{ // S16
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S17
|
ActionRow{ // S17
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S18
|
ActionRow{ // S18
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S19
|
ActionRow{ // S19
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S20
|
ActionRow{ // S20
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S21
|
ActionRow{ // S21
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S22
|
ActionRow{ // S22
|
||||||
Accept: 24,
|
Accept: 24,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S23
|
ActionRow{ // S23
|
||||||
Accept: 8,
|
Accept: 8,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S24
|
ActionRow{ // S24
|
||||||
Accept: 25,
|
Accept: 25,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S25
|
ActionRow{ // S25
|
||||||
Accept: 38,
|
Accept: 38,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S26
|
ActionRow{ // S26
|
||||||
Accept: 5,
|
Accept: 5,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S27
|
ActionRow{ // S27
|
||||||
Accept: 16,
|
Accept: 16,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S28
|
ActionRow{ // S28
|
||||||
Accept: 29,
|
Accept: 29,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S29
|
ActionRow{ // S29
|
||||||
Accept: 35,
|
Accept: 35,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S30
|
ActionRow{ // S30
|
||||||
Accept: 33,
|
Accept: 33,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S31
|
ActionRow{ // S31
|
||||||
Accept: 31,
|
Accept: 31,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S32
|
ActionRow{ // S32
|
||||||
Accept: 32,
|
Accept: 32,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S33
|
ActionRow{ // S33
|
||||||
Accept: 34,
|
Accept: 34,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S34
|
ActionRow{ // S34
|
||||||
Accept: 37,
|
Accept: 37,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S35
|
ActionRow{ // S35
|
||||||
Accept: 13,
|
Accept: 13,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S36
|
ActionRow{ // S36
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S37
|
ActionRow{ // S37
|
||||||
Accept: 2,
|
Accept: 2,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S38
|
ActionRow{ // S38
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S39
|
ActionRow{ // S39
|
||||||
Accept: 26,
|
Accept: 26,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S40
|
ActionRow{ // S40
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S41
|
ActionRow{ // S41
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S42
|
ActionRow{ // S42
|
||||||
Accept: 19,
|
Accept: 19,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S43
|
ActionRow{ // S43
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S44
|
ActionRow{ // S44
|
||||||
Accept: 17,
|
Accept: 17,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S45
|
ActionRow{ // S45
|
||||||
Accept: 12,
|
Accept: 12,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S46
|
ActionRow{ // S46
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S47
|
ActionRow{ // S47
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S48
|
ActionRow{ // S48
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S49
|
ActionRow{ // S49
|
||||||
Accept: 6,
|
Accept: 6,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S50
|
ActionRow{ // S50
|
||||||
Accept: 36,
|
Accept: 36,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S51
|
ActionRow{ // S51
|
||||||
Accept: 13,
|
Accept: 13,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S52
|
ActionRow{ // S52
|
||||||
Accept: 2,
|
Accept: 2,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S53
|
ActionRow{ // S53
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S54
|
ActionRow{ // S54
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S55
|
ActionRow{ // S55
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S56
|
ActionRow{ // S56
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S57
|
ActionRow{ // S57
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S58
|
ActionRow{ // S58
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S59
|
ActionRow{ // S59
|
||||||
Accept: 11,
|
Accept: 11,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S60
|
ActionRow{ // S60
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S61
|
ActionRow{ // S61
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S62
|
ActionRow{ // S62
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S63
|
ActionRow{ // S63
|
||||||
Accept: 14,
|
Accept: 14,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S64
|
ActionRow{ // S64
|
||||||
Accept: 27,
|
Accept: 27,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S65
|
ActionRow{ // S65
|
||||||
Accept: 20,
|
Accept: 20,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S66
|
ActionRow{ // S66
|
||||||
Accept: 21,
|
Accept: 21,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S67
|
ActionRow{ // S67
|
||||||
Accept: 15,
|
Accept: 15,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S68
|
ActionRow{ // S68
|
||||||
Accept: 18,
|
Accept: 18,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S69
|
ActionRow{ // S69
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S70
|
ActionRow{ // S70
|
||||||
Accept: 0,
|
Accept: 0,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S71
|
ActionRow{ // S71
|
||||||
Accept: 23,
|
Accept: 23,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
ActionRow{ // S72
|
ActionRow{ // S72
|
||||||
Accept: 22,
|
Accept: 22,
|
||||||
Ignore: "",
|
Ignore: "",
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package lexer
|
package lexer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -6,22 +5,22 @@ import (
|
||||||
// "fmt"
|
// "fmt"
|
||||||
// "github.com/localhots/penny/util"
|
// "github.com/localhots/penny/util"
|
||||||
|
|
||||||
|
"github.com/localhots/penny/token"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
"github.com/localhots/penny/token"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const(
|
const (
|
||||||
NoState = -1
|
NoState = -1
|
||||||
NumStates = 73
|
NumStates = 73
|
||||||
NumSymbols = 90
|
NumSymbols = 90
|
||||||
)
|
)
|
||||||
|
|
||||||
type Lexer struct {
|
type Lexer struct {
|
||||||
src []byte
|
src []byte
|
||||||
pos int
|
pos int
|
||||||
line int
|
line int
|
||||||
column int
|
column int
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLexer(src []byte) *Lexer {
|
func NewLexer(src []byte) *Lexer {
|
||||||
|
@ -77,7 +76,6 @@ func (this *Lexer) Scan() (tok *token.Token) {
|
||||||
this.column++
|
this.column++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Production start
|
// Production start
|
||||||
if rune1 != -1 {
|
if rune1 != -1 {
|
||||||
state = TransTab[state](rune1)
|
state = TransTab[state](rune1)
|
||||||
|
@ -99,7 +97,6 @@ func (this *Lexer) Scan() (tok *token.Token) {
|
||||||
// state = nextState
|
// state = nextState
|
||||||
// Debug end
|
// Debug end
|
||||||
|
|
||||||
|
|
||||||
if state != -1 {
|
if state != -1 {
|
||||||
switch {
|
switch {
|
||||||
case ActTab[state].Accept != -1:
|
case ActTab[state].Accept != -1:
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
package parser
|
package parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,159 +1,153 @@
|
||||||
|
|
||||||
package parser
|
package parser
|
||||||
|
|
||||||
type(
|
type (
|
||||||
actionTable [numStates]actionRow
|
actionTable [numStates]actionRow
|
||||||
actionRow struct {
|
actionRow struct {
|
||||||
canRecover bool
|
canRecover bool
|
||||||
actions [numSymbols]action
|
actions [numSymbols]action
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var actionTab = actionTable{
|
var actionTab = actionTable{
|
||||||
actionRow{ // S0
|
actionRow{ // S0
|
||||||
canRecover: false,
|
canRecover: false,
|
||||||
actions: [numSymbols]action{
|
actions: [numSymbols]action{
|
||||||
nil, /* INVALID */
|
nil, /* INVALID */
|
||||||
nil, /* $ */
|
nil, /* $ */
|
||||||
shift(2), /* word */
|
shift(2), /* word */
|
||||||
nil, /* number */
|
nil, /* number */
|
||||||
nil, /* = */
|
nil, /* = */
|
||||||
nil, /* && */
|
nil, /* && */
|
||||||
nil, /* || */
|
nil, /* || */
|
||||||
nil, /* ! */
|
nil, /* ! */
|
||||||
nil, /* | */
|
nil, /* | */
|
||||||
nil, /* ( */
|
nil, /* ( */
|
||||||
nil, /* ) */
|
nil, /* ) */
|
||||||
nil, /* for */
|
nil, /* for */
|
||||||
nil, /* in */
|
nil, /* in */
|
||||||
nil, /* name */
|
nil, /* name */
|
||||||
nil, /* case */
|
nil, /* case */
|
||||||
nil, /* esac */
|
nil, /* esac */
|
||||||
nil, /* ;; */
|
nil, /* ;; */
|
||||||
nil, /* if */
|
nil, /* if */
|
||||||
nil, /* then */
|
nil, /* then */
|
||||||
nil, /* fi */
|
nil, /* fi */
|
||||||
nil, /* elif */
|
nil, /* elif */
|
||||||
nil, /* else */
|
nil, /* else */
|
||||||
nil, /* while */
|
nil, /* while */
|
||||||
nil, /* until */
|
nil, /* until */
|
||||||
nil, /* { */
|
nil, /* { */
|
||||||
nil, /* } */
|
nil, /* } */
|
||||||
nil, /* do */
|
nil, /* do */
|
||||||
nil, /* done */
|
nil, /* done */
|
||||||
nil, /* < */
|
nil, /* < */
|
||||||
nil, /* <& */
|
nil, /* <& */
|
||||||
nil, /* > */
|
nil, /* > */
|
||||||
nil, /* >& */
|
nil, /* >& */
|
||||||
nil, /* >> */
|
nil, /* >> */
|
||||||
nil, /* <> */
|
nil, /* <> */
|
||||||
nil, /* >| */
|
nil, /* >| */
|
||||||
nil, /* << */
|
nil, /* << */
|
||||||
nil, /* <<- */
|
nil, /* <<- */
|
||||||
nil, /* \n */
|
nil, /* \n */
|
||||||
nil, /* nothing */
|
nil, /* nothing */
|
||||||
nil, /* & */
|
nil, /* & */
|
||||||
nil, /* ; */
|
nil, /* ; */
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
actionRow{ // S1
|
actionRow{ // S1
|
||||||
canRecover: false,
|
canRecover: false,
|
||||||
actions: [numSymbols]action{
|
actions: [numSymbols]action{
|
||||||
nil, /* INVALID */
|
nil, /* INVALID */
|
||||||
accept(true), /* $ */
|
accept(true), /* $ */
|
||||||
nil, /* word */
|
nil, /* word */
|
||||||
nil, /* number */
|
nil, /* number */
|
||||||
nil, /* = */
|
nil, /* = */
|
||||||
nil, /* && */
|
nil, /* && */
|
||||||
nil, /* || */
|
nil, /* || */
|
||||||
nil, /* ! */
|
nil, /* ! */
|
||||||
nil, /* | */
|
nil, /* | */
|
||||||
nil, /* ( */
|
nil, /* ( */
|
||||||
nil, /* ) */
|
nil, /* ) */
|
||||||
nil, /* for */
|
nil, /* for */
|
||||||
nil, /* in */
|
nil, /* in */
|
||||||
nil, /* name */
|
nil, /* name */
|
||||||
nil, /* case */
|
nil, /* case */
|
||||||
nil, /* esac */
|
nil, /* esac */
|
||||||
nil, /* ;; */
|
nil, /* ;; */
|
||||||
nil, /* if */
|
nil, /* if */
|
||||||
nil, /* then */
|
nil, /* then */
|
||||||
nil, /* fi */
|
nil, /* fi */
|
||||||
nil, /* elif */
|
nil, /* elif */
|
||||||
nil, /* else */
|
nil, /* else */
|
||||||
nil, /* while */
|
nil, /* while */
|
||||||
nil, /* until */
|
nil, /* until */
|
||||||
nil, /* { */
|
nil, /* { */
|
||||||
nil, /* } */
|
nil, /* } */
|
||||||
nil, /* do */
|
nil, /* do */
|
||||||
nil, /* done */
|
nil, /* done */
|
||||||
nil, /* < */
|
nil, /* < */
|
||||||
nil, /* <& */
|
nil, /* <& */
|
||||||
nil, /* > */
|
nil, /* > */
|
||||||
nil, /* >& */
|
nil, /* >& */
|
||||||
nil, /* >> */
|
nil, /* >> */
|
||||||
nil, /* <> */
|
nil, /* <> */
|
||||||
nil, /* >| */
|
nil, /* >| */
|
||||||
nil, /* << */
|
nil, /* << */
|
||||||
nil, /* <<- */
|
nil, /* <<- */
|
||||||
nil, /* \n */
|
nil, /* \n */
|
||||||
nil, /* nothing */
|
nil, /* nothing */
|
||||||
nil, /* & */
|
nil, /* & */
|
||||||
nil, /* ; */
|
nil, /* ; */
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
actionRow{ // S2
|
actionRow{ // S2
|
||||||
canRecover: false,
|
canRecover: false,
|
||||||
actions: [numSymbols]action{
|
actions: [numSymbols]action{
|
||||||
nil, /* INVALID */
|
nil, /* INVALID */
|
||||||
reduce(1), /* $, reduce: Word */
|
reduce(1), /* $, reduce: Word */
|
||||||
nil, /* word */
|
nil, /* word */
|
||||||
nil, /* number */
|
nil, /* number */
|
||||||
nil, /* = */
|
nil, /* = */
|
||||||
nil, /* && */
|
nil, /* && */
|
||||||
nil, /* || */
|
nil, /* || */
|
||||||
nil, /* ! */
|
nil, /* ! */
|
||||||
nil, /* | */
|
nil, /* | */
|
||||||
nil, /* ( */
|
nil, /* ( */
|
||||||
nil, /* ) */
|
nil, /* ) */
|
||||||
nil, /* for */
|
nil, /* for */
|
||||||
nil, /* in */
|
nil, /* in */
|
||||||
nil, /* name */
|
nil, /* name */
|
||||||
nil, /* case */
|
nil, /* case */
|
||||||
nil, /* esac */
|
nil, /* esac */
|
||||||
nil, /* ;; */
|
nil, /* ;; */
|
||||||
nil, /* if */
|
nil, /* if */
|
||||||
nil, /* then */
|
nil, /* then */
|
||||||
nil, /* fi */
|
nil, /* fi */
|
||||||
nil, /* elif */
|
nil, /* elif */
|
||||||
nil, /* else */
|
nil, /* else */
|
||||||
nil, /* while */
|
nil, /* while */
|
||||||
nil, /* until */
|
nil, /* until */
|
||||||
nil, /* { */
|
nil, /* { */
|
||||||
nil, /* } */
|
nil, /* } */
|
||||||
nil, /* do */
|
nil, /* do */
|
||||||
nil, /* done */
|
nil, /* done */
|
||||||
nil, /* < */
|
nil, /* < */
|
||||||
nil, /* <& */
|
nil, /* <& */
|
||||||
nil, /* > */
|
nil, /* > */
|
||||||
nil, /* >& */
|
nil, /* >& */
|
||||||
nil, /* >> */
|
nil, /* >> */
|
||||||
nil, /* <> */
|
nil, /* <> */
|
||||||
nil, /* >| */
|
nil, /* >| */
|
||||||
nil, /* << */
|
nil, /* << */
|
||||||
nil, /* <<- */
|
nil, /* <<- */
|
||||||
nil, /* \n */
|
nil, /* \n */
|
||||||
nil, /* nothing */
|
nil, /* nothing */
|
||||||
nil, /* & */
|
nil, /* & */
|
||||||
nil, /* ; */
|
nil, /* ; */
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
package parser
|
package parser
|
||||||
|
|
||||||
const numNTSymbols = 47
|
const numNTSymbols = 47
|
||||||
type(
|
|
||||||
|
type (
|
||||||
gotoTable [numStates]gotoRow
|
gotoTable [numStates]gotoRow
|
||||||
gotoRow [numNTSymbols] int
|
gotoRow [numNTSymbols]int
|
||||||
)
|
)
|
||||||
|
|
||||||
var gotoTab = gotoTable{
|
var gotoTab = gotoTable{
|
||||||
gotoRow{ // S0
|
gotoRow{ // S0
|
||||||
|
|
||||||
-1, // S'
|
-1, // S'
|
||||||
1, // Word
|
1, // Word
|
||||||
-1, // IoNumber
|
-1, // IoNumber
|
||||||
-1, // AssignmentWord
|
-1, // AssignmentWord
|
||||||
-1, // List
|
-1, // List
|
||||||
|
@ -60,7 +60,6 @@ var gotoTab = gotoTable{
|
||||||
-1, // Separator
|
-1, // Separator
|
||||||
-1, // SequentialSep
|
-1, // SequentialSep
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
gotoRow{ // S1
|
gotoRow{ // S1
|
||||||
|
|
||||||
|
@ -112,7 +111,6 @@ var gotoTab = gotoTable{
|
||||||
-1, // Separator
|
-1, // Separator
|
||||||
-1, // SequentialSep
|
-1, // SequentialSep
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
gotoRow{ // S2
|
gotoRow{ // S2
|
||||||
|
|
||||||
|
@ -164,7 +162,5 @@ var gotoTab = gotoTable{
|
||||||
-1, // Separator
|
-1, // Separator
|
||||||
-1, // SequentialSep
|
-1, // SequentialSep
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
|
|
||||||
package parser
|
package parser
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
parseError "github.com/localhots/penny/errors"
|
parseError "github.com/localhots/penny/errors"
|
||||||
"github.com/localhots/penny/token"
|
"github.com/localhots/penny/token"
|
||||||
)
|
)
|
||||||
|
@ -18,16 +17,16 @@ const (
|
||||||
// Stack
|
// Stack
|
||||||
|
|
||||||
type stack struct {
|
type stack struct {
|
||||||
state []int
|
state []int
|
||||||
attrib []Attrib
|
attrib []Attrib
|
||||||
}
|
}
|
||||||
|
|
||||||
const iNITIAL_STACK_SIZE = 100
|
const iNITIAL_STACK_SIZE = 100
|
||||||
|
|
||||||
func newStack() *stack {
|
func newStack() *stack {
|
||||||
return &stack{ state: make([]int, 0, iNITIAL_STACK_SIZE),
|
return &stack{state: make([]int, 0, iNITIAL_STACK_SIZE),
|
||||||
attrib: make([]Attrib, 0, iNITIAL_STACK_SIZE),
|
attrib: make([]Attrib, 0, iNITIAL_STACK_SIZE),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *stack) reset() {
|
func (this *stack) reset() {
|
||||||
|
@ -40,8 +39,8 @@ func (this *stack) push(s int, a Attrib) {
|
||||||
this.attrib = append(this.attrib, a)
|
this.attrib = append(this.attrib, a)
|
||||||
}
|
}
|
||||||
|
|
||||||
func(this *stack) top() int {
|
func (this *stack) top() int {
|
||||||
return this.state[len(this.state) - 1]
|
return this.state[len(this.state)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *stack) peek(pos int) int {
|
func (this *stack) peek(pos int) int {
|
||||||
|
@ -53,9 +52,9 @@ func (this *stack) topIndex() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *stack) popN(items int) []Attrib {
|
func (this *stack) popN(items int) []Attrib {
|
||||||
lo, hi := len(this.state) - items, len(this.state)
|
lo, hi := len(this.state)-items, len(this.state)
|
||||||
|
|
||||||
attrib := this.attrib[lo: hi]
|
attrib := this.attrib[lo:hi]
|
||||||
|
|
||||||
this.state = this.state[:lo]
|
this.state = this.state[:lo]
|
||||||
this.attrib = this.attrib[:lo]
|
this.attrib = this.attrib[:lo]
|
||||||
|
@ -190,7 +189,6 @@ func (this *Parser) Parse(scanner Scanner) (res interface{}, err error) {
|
||||||
|
|
||||||
// fmt.Printf("S%d %s %s\n", this.stack.top(), token.TokMap.TokenString(this.nextToken), action.String())
|
// fmt.Printf("S%d %s %s\n", this.stack.top(), token.TokMap.TokenString(this.nextToken), action.String())
|
||||||
|
|
||||||
|
|
||||||
switch act := action.(type) {
|
switch act := action.(type) {
|
||||||
case accept:
|
case accept:
|
||||||
res = this.stack.popN(1)[0]
|
res = this.stack.popN(1)[0]
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
package token
|
package token
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,14 +12,14 @@ type Token struct {
|
||||||
|
|
||||||
type Type int
|
type Type int
|
||||||
|
|
||||||
const(
|
const (
|
||||||
INVALID Type = iota
|
INVALID Type = iota
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
|
|
||||||
type Pos struct {
|
type Pos struct {
|
||||||
Offset int
|
Offset int
|
||||||
Line int
|
Line int
|
||||||
Column int
|
Column int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +28,8 @@ func (this Pos) String() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type TokenMap struct {
|
type TokenMap struct {
|
||||||
typeMap []string
|
typeMap []string
|
||||||
idMap map[string]Type
|
idMap map[string]Type
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this TokenMap) Id(tok Type) string {
|
func (this TokenMap) Id(tok Type) string {
|
||||||
|
@ -101,48 +100,47 @@ var TokMap = TokenMap{
|
||||||
";",
|
";",
|
||||||
},
|
},
|
||||||
|
|
||||||
idMap: map[string]Type {
|
idMap: map[string]Type{
|
||||||
"INVALID": 0,
|
"INVALID": 0,
|
||||||
"$": 1,
|
"$": 1,
|
||||||
"word": 2,
|
"word": 2,
|
||||||
"number": 3,
|
"number": 3,
|
||||||
"=": 4,
|
"=": 4,
|
||||||
"&&": 5,
|
"&&": 5,
|
||||||
"||": 6,
|
"||": 6,
|
||||||
"!": 7,
|
"!": 7,
|
||||||
"|": 8,
|
"|": 8,
|
||||||
"(": 9,
|
"(": 9,
|
||||||
")": 10,
|
")": 10,
|
||||||
"for": 11,
|
"for": 11,
|
||||||
"in": 12,
|
"in": 12,
|
||||||
"name": 13,
|
"name": 13,
|
||||||
"case": 14,
|
"case": 14,
|
||||||
"esac": 15,
|
"esac": 15,
|
||||||
";;": 16,
|
";;": 16,
|
||||||
"if": 17,
|
"if": 17,
|
||||||
"then": 18,
|
"then": 18,
|
||||||
"fi": 19,
|
"fi": 19,
|
||||||
"elif": 20,
|
"elif": 20,
|
||||||
"else": 21,
|
"else": 21,
|
||||||
"while": 22,
|
"while": 22,
|
||||||
"until": 23,
|
"until": 23,
|
||||||
"{": 24,
|
"{": 24,
|
||||||
"}": 25,
|
"}": 25,
|
||||||
"do": 26,
|
"do": 26,
|
||||||
"done": 27,
|
"done": 27,
|
||||||
"<": 28,
|
"<": 28,
|
||||||
"<&": 29,
|
"<&": 29,
|
||||||
">": 30,
|
">": 30,
|
||||||
">&": 31,
|
">&": 31,
|
||||||
">>": 32,
|
">>": 32,
|
||||||
"<>": 33,
|
"<>": 33,
|
||||||
">|": 34,
|
">|": 34,
|
||||||
"<<": 35,
|
"<<": 35,
|
||||||
"<<-": 36,
|
"<<-": 36,
|
||||||
"\n": 37,
|
"\n": 37,
|
||||||
"nothing": 38,
|
"nothing": 38,
|
||||||
"&": 39,
|
"&": 39,
|
||||||
";": 40,
|
";": 40,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
//Copyright 2013 Vastech SA (PTY) LTD
|
//Copyright 2013 Vastech SA (PTY) LTD
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
//Copyright 2013 Vastech SA (PTY) LTD
|
//Copyright 2013 Vastech SA (PTY) LTD
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
|
Loading…
Reference in New Issue