Removed rune literals from analyzer
This commit is contained in:
parent
5c286cf955
commit
7af98d1c6f
@ -167,10 +167,8 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
|||||||
token.kind = TokenKindNewline
|
token.kind = TokenKindNewline
|
||||||
lexer.addToken(token)
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '"':
|
|
||||||
err = lexer.tokenizeString(false)
|
|
||||||
case '\'':
|
case '\'':
|
||||||
err = lexer.tokenizeString(true)
|
err = lexer.tokenizeString()
|
||||||
case ':':
|
case ':':
|
||||||
token := lexer.newToken()
|
token := lexer.newToken()
|
||||||
token.kind = TokenKindColon
|
token.kind = TokenKindColon
|
||||||
|
@ -82,7 +82,7 @@ func compareErr (
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, err = Tokenize(file)
|
_, err = Tokenize(file)
|
||||||
check := err.(infoerr.Error)
|
check, _ := err.(infoerr.Error)
|
||||||
|
|
||||||
test.Log("error that was recieved:")
|
test.Log("error that was recieved:")
|
||||||
test.Log(check)
|
test.Log(check)
|
||||||
@ -132,7 +132,7 @@ func TestTokenizeAll (test *testing.T) {
|
|||||||
quickToken(9, TokenKindUInt, uint64(932748397)),
|
quickToken(9, TokenKindUInt, uint64(932748397)),
|
||||||
quickToken(12, TokenKindFloat, 239485.37520),
|
quickToken(12, TokenKindFloat, 239485.37520),
|
||||||
quickToken(16, TokenKindString, "hello world!\n"),
|
quickToken(16, TokenKindString, "hello world!\n"),
|
||||||
quickToken(3, TokenKindRune, 'E'),
|
quickToken(3, TokenKindString, "E"),
|
||||||
quickToken(10, TokenKindName, "helloWorld"),
|
quickToken(10, TokenKindName, "helloWorld"),
|
||||||
quickToken(1, TokenKindColon, nil),
|
quickToken(1, TokenKindColon, nil),
|
||||||
quickToken(1, TokenKindDot, nil),
|
quickToken(1, TokenKindDot, nil),
|
||||||
@ -215,18 +215,17 @@ func TestTokenizeNumbers (test *testing.T) {
|
|||||||
|
|
||||||
func TestTokenizeText (test *testing.T) {
|
func TestTokenizeText (test *testing.T) {
|
||||||
checkTokenSlice("../tests/lexer/text.arf", test,
|
checkTokenSlice("../tests/lexer/text.arf", test,
|
||||||
quickToken(34, TokenKindString, "hello world!\a\b\f\n\r\t\v'\"\\"),
|
quickToken(34, TokenKindString, "hello world!\a\b\f\n\r\t\v'\\"),
|
||||||
quickToken(1, TokenKindNewline, nil),
|
quickToken(1, TokenKindNewline, nil),
|
||||||
quickToken(4, TokenKindRune, '\a'),
|
quickToken(4, TokenKindString, "\a"),
|
||||||
quickToken(4, TokenKindRune, '\b'),
|
quickToken(4, TokenKindString, "\b"),
|
||||||
quickToken(4, TokenKindRune, '\f'),
|
quickToken(4, TokenKindString, "\f"),
|
||||||
quickToken(4, TokenKindRune, '\n'),
|
quickToken(4, TokenKindString, "\n"),
|
||||||
quickToken(4, TokenKindRune, '\r'),
|
quickToken(4, TokenKindString, "\r"),
|
||||||
quickToken(4, TokenKindRune, '\t'),
|
quickToken(4, TokenKindString, "\t"),
|
||||||
quickToken(4, TokenKindRune, '\v'),
|
quickToken(4, TokenKindString, "\v"),
|
||||||
quickToken(4, TokenKindRune, '\''),
|
quickToken(4, TokenKindString, "'"),
|
||||||
quickToken(4, TokenKindRune, '"' ),
|
quickToken(4, TokenKindString, "\\"),
|
||||||
quickToken(4, TokenKindRune, '\\'),
|
|
||||||
quickToken(1, TokenKindNewline, nil),
|
quickToken(1, TokenKindNewline, nil),
|
||||||
quickToken(35, TokenKindString, "hello world \x40\u0040\U00000040!"),
|
quickToken(35, TokenKindString, "hello world \x40\u0040\U00000040!"),
|
||||||
quickToken(1, TokenKindNewline, nil),
|
quickToken(1, TokenKindNewline, nil),
|
||||||
|
@ -4,7 +4,7 @@ import "strconv"
|
|||||||
import "git.tebibyte.media/arf/arf/infoerr"
|
import "git.tebibyte.media/arf/arf/infoerr"
|
||||||
|
|
||||||
// tokenizeString tokenizes a string or rune literal.
|
// tokenizeString tokenizes a string or rune literal.
|
||||||
func (lexer *LexingOperation) tokenizeString (isRuneLiteral bool) (err error) {
|
func (lexer *LexingOperation) tokenizeString () (err error) {
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
@ -34,32 +34,15 @@ func (lexer *LexingOperation) tokenizeString (isRuneLiteral bool) (err error) {
|
|||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
}
|
}
|
||||||
|
|
||||||
if isRuneLiteral {
|
|
||||||
if lexer.char == '\'' { break }
|
if lexer.char == '\'' { break }
|
||||||
} else {
|
|
||||||
if lexer.char == '"' { break }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
beginning.SetWidth(len(got))
|
beginning.SetWidth(len(got))
|
||||||
if isRuneLiteral {
|
|
||||||
if len(got) > 1 {
|
|
||||||
err = infoerr.NewError (
|
|
||||||
beginning,
|
|
||||||
"excess data in rune literal",
|
|
||||||
infoerr.ErrorKindError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
token.kind = TokenKindRune
|
|
||||||
token.value = rune([]rune(got)[0])
|
|
||||||
} else {
|
|
||||||
token.kind = TokenKindString
|
token.kind = TokenKindString
|
||||||
token.value = got
|
token.value = got
|
||||||
}
|
|
||||||
|
|
||||||
token.location.SetWidth(tokenWidth)
|
token.location.SetWidth(tokenWidth)
|
||||||
lexer.addToken(token)
|
lexer.addToken(token)
|
||||||
@ -77,7 +60,6 @@ var escapeSequenceMap = map[rune] rune {
|
|||||||
't': '\x09',
|
't': '\x09',
|
||||||
'v': '\x0b',
|
'v': '\x0b',
|
||||||
'\'': '\'',
|
'\'': '\'',
|
||||||
'"': '"',
|
|
||||||
'\\': '\\',
|
'\\': '\\',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ const (
|
|||||||
TokenKindUInt
|
TokenKindUInt
|
||||||
TokenKindFloat
|
TokenKindFloat
|
||||||
TokenKindString
|
TokenKindString
|
||||||
TokenKindRune
|
|
||||||
|
|
||||||
TokenKindName
|
TokenKindName
|
||||||
|
|
||||||
@ -156,8 +155,6 @@ func (tokenKind TokenKind) Describe () (description string) {
|
|||||||
description = "Float"
|
description = "Float"
|
||||||
case TokenKindString:
|
case TokenKindString:
|
||||||
description = "String"
|
description = "String"
|
||||||
case TokenKindRune:
|
|
||||||
description = "Rune"
|
|
||||||
case TokenKindName:
|
case TokenKindName:
|
||||||
description = "Name"
|
description = "Name"
|
||||||
case TokenKindColon:
|
case TokenKindColon:
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
:arf
|
:arf
|
||||||
--- rw -> -349820394 932748397 239485.37520 "hello world!\n" 'E' helloWorld:.,..()[]{}
|
--- rw -> -349820394 932748397 239485.37520 'hello world!\n' 'E' helloWorld:.,..()[]{}
|
||||||
+ - ++ -- * / @ ! % %= ~ ~= = == != < <= << <<= > >= >> >>= | |= || & &= && ^ ^=
|
+ - ++ -- * / @ ! % %= ~ ~= = == != < <= << <<= > >= >> >>= | |= || & &= && ^ ^=
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
:arf
|
:arf
|
||||||
"\g"
|
'\g'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
:arf
|
:arf
|
||||||
"hello world!\a\b\f\n\r\t\v\'\"\\"
|
'hello world!\a\b\f\n\r\t\v\'\\'
|
||||||
'\a' '\b' '\f' '\n' '\r' '\t' '\v' '\'' '\"' '\\'
|
'\a' '\b' '\f' '\n' '\r' '\t' '\v' '\'' '\\'
|
||||||
"hello world \x40\u0040\U00000040!"
|
'hello world \x40\u0040\U00000040!'
|
||||||
|
Reference in New Issue
Block a user