mizchi/cst/examples/expr_lang does not have a README file

    Lexer

    pub struct Lexer {
    input : String
    pos : Int
    } derive(
    Debug
    )

    Lexer state

    Lexer::is_eof

    fn Lexer::is_eof(self : Lexer) -> Bool

    Check if lexer is at end

    Lexer::new

    fn Lexer::new(input : String) -> Lexer

    Lexer::next_token

    fn Lexer::next_token(self : Lexer) -> Token

    Lex a single token

    Parser

    pub struct Parser {
    tokens : Array[Token]
    pos : Int
    builder :
    GreenNodeBuilder

    }

    Parser state

    Parser::new

    fn Parser::new(tokens : Array[Token]) -> Parser

    Parser::parse

    Parse source file

    Token

    pub struct Token {
    kind :
    SyntaxKind

    text : String
    } derive(Eq,
    Debug
    )

    Token produced by the lexer

    Token::kind

    Token::new

    fn Token::new(kind :
    SyntaxKind
    , text : String) -> Token

    Token::text

    fn Token::text(self : Token) -> String

    arg_list

    binary_expr

    call_expr

    error_kind

    expr_stmt

    format

    fn format(input : String) -> String

    Format source code string

    is_token

    fn is_token(kind :
    SyntaxKind
    ) -> Bool

    Check if a SyntaxKind is a token (not a node)

    is_trivia

    fn is_trivia(kind :
    SyntaxKind
    ) -> Bool

    Check if a SyntaxKind is trivia (whitespace/newline)

    kind_name

    fn kind_name(kind :
    SyntaxKind
    ) -> String

    Get the name of a SyntaxKind for debugging

    let_stmt

    name_ref

    param_list

    paren_expr

    parse

    fn parse(input : String) ->
    SyntaxNode

    Parse input string and return CST

    source_file

    tokenize

    fn tokenize(input : String) -> Array[Token]

    Tokenize entire input

    whitespace