Current section

Files

Jump to
eyg_parser src eyg parser token.gleam
Raw

src/eyg/parser/token.gleam

import gleam/list
pub type Token {
Comment(String)
Whitespace(String)
Name(String)
Uppername(String)
Integer(String)
String(String)
Let
Match
Perform
Deep
Handle
Import
// Having keyword token instead of using name prevents keywords used as names
Equal
Comma
DotDot
Dot
Colon
RightArrow
Minus
Bang
Bar
Hash
At
LeftParen
RightParen
LeftBrace
RightBrace
LeftSquare
RightSquare
// Invalid token
UnexpectedGrapheme(String)
UnterminatedString(String)
InvalidEscape(String)
}
pub fn drop_whitespace(tokens) {
list.filter(tokens, fn(token) {
case token {
#(Whitespace(_), _) -> False
_ -> True
}
})
}
pub fn drop_comments(tokens) {
list.filter(tokens, fn(token) {
case token {
#(Comment(_), _) -> False
_ -> True
}
})
}
pub fn to_string(token) {
case token {
Comment(content) -> "//" <> content
Whitespace(raw) -> raw
Name(raw) -> raw
Uppername(raw) -> raw
Integer(raw) -> raw
String(raw) -> "\"" <> raw <> "\""
Let -> "let"
Match -> "match"
Perform -> "perform"
Deep -> "deep"
Handle -> "handle"
Import -> "import"
// Having keyword token instead of using name prevents keywords used as names
Equal -> "="
Comma -> ","
DotDot -> ".."
Dot -> "."
Colon -> ":"
RightArrow -> "->"
Minus -> "-"
Bang -> "!"
Bar -> "|"
Hash -> "#"
At -> "@"
LeftParen -> "("
RightParen -> ")"
LeftBrace -> "{"
RightBrace -> "}"
LeftSquare -> "["
RightSquare -> "]"
// Invalid token
UnexpectedGrapheme(raw) -> raw
UnterminatedString(raw) -> "\"" <> raw
InvalidEscape(raw) -> "\"" <> raw
}
}