24 lines
604 B
Go
24 lines
604 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[TokenType]().
|
|
On(`:=`, TokenAssign).
|
|
On(`\(`, TokenOpenParen).
|
|
On(`\)`, TokenCloseParen).
|
|
On(`\{`, TokenOpenBrace).
|
|
On(`\}`, TokenCloseBrace).
|
|
On(`;`, TokenHardBreak).
|
|
On(`\n`, TokenSoftBreak).
|
|
On(`\\`, TokenSlash).
|
|
On(`\.`, TokenDot).
|
|
On(`[a-zA-Z0-9_]+`, TokenAtom).
|
|
Skip(`#[^\n]*`).
|
|
Skip(`[^\S\n]+`)
|
|
|
|
// scan tokenizes a string into Saccharine tokens.
|
|
func scan(input string) ([]Token, error) {
|
|
return scanner.Scan(input)
|
|
}
|