Support for digraphs such as &&, <<, ++
This commit is contained in:
parent
758b85e735
commit
0a31ea7bf8
@ -159,7 +159,13 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
|||||||
})
|
})
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '+':
|
case '+':
|
||||||
// TODO: tokenize plus begin
|
err = lexer.nextRune()
|
||||||
|
if err != nil { return }
|
||||||
|
token := Token { kind: TokenKindPlus }
|
||||||
|
if lexer.char == '+' {
|
||||||
|
token.kind = TokenKindIncrement
|
||||||
|
}
|
||||||
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '-':
|
case '-':
|
||||||
err = lexer.tokenizeDashBeginning()
|
err = lexer.tokenizeDashBeginning()
|
||||||
@ -194,16 +200,40 @@ func (lexer *LexingOperation) tokenizeSymbolBeginning () (err error) {
|
|||||||
})
|
})
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '<':
|
case '<':
|
||||||
// TODO: tokenize less than begin
|
err = lexer.nextRune()
|
||||||
|
if err != nil { return }
|
||||||
|
token := Token { kind: TokenKindLessThan }
|
||||||
|
if lexer.char == '<' {
|
||||||
|
token.kind = TokenKindLShift
|
||||||
|
}
|
||||||
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '>':
|
case '>':
|
||||||
// TODO: tokenize greater than begin
|
err = lexer.nextRune()
|
||||||
|
if err != nil { return }
|
||||||
|
token := Token { kind: TokenKindGreaterThan }
|
||||||
|
if lexer.char == '>' {
|
||||||
|
token.kind = TokenKindRShift
|
||||||
|
}
|
||||||
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '|':
|
case '|':
|
||||||
// TODO: tokenize bar begin
|
err = lexer.nextRune()
|
||||||
|
if err != nil { return }
|
||||||
|
token := Token { kind: TokenKindBinaryOr }
|
||||||
|
if lexer.char == '|' {
|
||||||
|
token.kind = TokenKindLogicalOr
|
||||||
|
}
|
||||||
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
case '&':
|
case '&':
|
||||||
// TODO: tokenize and begin
|
err = lexer.nextRune()
|
||||||
|
if err != nil { return }
|
||||||
|
token := Token { kind: TokenKindBinaryAnd }
|
||||||
|
if lexer.char == '&' {
|
||||||
|
token.kind = TokenKindLogicalAnd
|
||||||
|
}
|
||||||
|
lexer.addToken(token)
|
||||||
err = lexer.nextRune()
|
err = lexer.nextRune()
|
||||||
default:
|
default:
|
||||||
err = file.NewError (
|
err = file.NewError (
|
||||||
|
Reference in New Issue
Block a user