Files
lambda/pkg/saccharine/scan.go

25 lines
724 B
Go

package saccharine
import "git.maximhutz.com/max/lambda/pkg/token"
// scanner is the declarative lexer for the Saccharine language.
var scanner = token.NewScanner(
token.On(`:=`, TokenAssign, 1),
token.On(`\(`, TokenOpenParen, 0),
token.On(`\)`, TokenCloseParen, 0),
token.On(`\{`, TokenOpenBrace, 0),
token.On(`\}`, TokenCloseBrace, 0),
token.On(`;`, TokenHardBreak, 0),
token.On(`\n`, TokenSoftBreak, 0),
token.On(`\\`, TokenSlash, 0),
token.On(`\.`, TokenDot, 0),
token.On(`[a-zA-Z0-9_]+`, TokenAtom, 0),
token.Skip[TokenType](`#[^\n]*`, 0),
token.Skip[TokenType](`[^\S\n]+`, 0),
)
// scan tokenizes a string into Saccharine tokens.
func scan(input string) ([]Token, error) {
return scanner.Scan(input)
}