Browse Source

add token.IsLiteral() method

master
Brett Langdon 10 years ago
parent
commit
49871aff13
2 changed files with 7 additions and 3 deletions
  1. +3
    -3
      parser/parser.go
  2. +4
    -0
      token/token.go

+ 3
- 3
parser/parser.go View File

@ -48,7 +48,7 @@ func (parser *Parser) expect(tokID token.TokenID) bool {
func (parser *Parser) expectLiteral(literal string) bool {
next := parser.nextToken()
if next.ID != token.NAME || next.Literal != literal {
if !next.IsLiteral(literal) {
msg := "Unexpected literal \"" + next.Literal + "\" expected \"" + literal + "\""
parser.addError(msg)
return false
@ -78,7 +78,7 @@ func (parser *Parser) parseOrTest() *ast.OrTest {
orTest.Append(andTest)
for {
next := parser.nextToken()
if next.ID != token.NAME || next.Literal != "and" {
if !next.IsLiteral("and") {
parser.unreadToken(next)
break
}
@ -100,7 +100,7 @@ func (parser *Parser) parseTest() *ast.Test {
test.Append(orTest)
next := parser.nextToken()
// Do not use `parser.expectLiteral`, this next part is optional
if next.ID == token.NAME && next.Literal == "if" {
if next.IsLiteral("if") {
orTest = parser.parseOrTest()
if orTest != nil {
test.Append(orTest)


+ 4
- 0
token/token.go View File

@ -23,6 +23,10 @@ func (token *Token) End() []int {
return []int{token.LineEnd, token.ColumnEnd}
}
func (token *Token) IsLiteral(literal string) bool {
return token.ID == NAME && token.Literal == literal
}
func (token *Token) Repr() string {
return fmt.Sprintf(
"Token{ID: %#v, Literal: %#v, LineStart: %#v, ColumnStart: %#v, LineEnd: %#v, ColumnEnd: %#v}",


Loading…
Cancel
Save