Module C_sharp_strange_lib.Parser

Copyright 2026, Dmitrii Kuznetsov

SPDX-License-Identifier: LGPL-3.0-or-later

Parser for C#-like language

Basic parsers

val reserved : string list

List of reserved keywords

val in_reserved : string -> bool

Check if a string is a reserved keyword

val is_space : char -> bool

Check if character is a whitespace

val is_token_sym : char -> bool

Check if character can be part of a token (letter, digit, underscore)

val skip_spaces : unit Angstrom.t

Parser that skips whitespace characters

val parens : 'a Angstrom.t -> 'a Angstrom.t

parens p parses p enclosed in parentheses

val braces : 'a Angstrom.t -> 'a Angstrom.t

braces p parses p enclosed in curly braces

val brackets : 'a Angstrom.t -> 'a Angstrom.t

brackets p parses p enclosed in square brackets

val skip_semicolons : unit Angstrom.t

Skips zero or more semicolons

val skip_semicolons1 : unit Angstrom.t

Skips one or more semicolons

Value parsers

val parse_int : Ast.val_type Angstrom.t

Parses integer literals

val parse_char : Ast.val_type Angstrom.t

Parses character literals (e.g., 'a')

val parse_bool : Ast.val_type Angstrom.t

Parses boolean literals (true/false)

val parse_val_string : Ast.val_type Angstrom.t

Parses string literals (e.g., "hello")

val parse_null : Ast.val_type Angstrom.t

Parses null literal

val parse_value : Ast.expr Angstrom.t

Parses any value literal as expression

Identifier parsers

val parse_id : Ast.ident Angstrom.t

Parses identifiers (must not be reserved words)

Type parsers

val parse_type_word : Ast.base_type Angstrom.t

Parses type keywords (int, char, bool, string)

val parse_base_type : Ast._type Angstrom.t

Parses base types (TypeInt, TypeChar, TypeBool, TypeString)

val parse_var_type : Ast.var_type Angstrom.t

Parses variable types (TypeVar of base_type)

val parse_method_type : Ast._type Angstrom.t

Parses method return types (including void)

Modifier parsers

val parse_modifiers : Ast.modifier list Angstrom.t

Parses zero or more modifiers (public, static, async)

Expression parsers

val parse_ops : Ast.expr Angstrom.t

Main expression parser with operator precedence

val parse_assign : Ast.expr Angstrom.t

Parses assignment expressions

val parse_id_expr : Ast.expr Angstrom.t

Parses identifier as expression

val parse_call_expr : Ast.expr Angstrom.t -> Ast.expr Angstrom.t

parse_call_expr arg parses function calls with given argument parser

Statement parsers

val parse_decl : Ast.stmt Angstrom.t

Parses variable declarations

val parse_stmt_ops : Ast.stmt Angstrom.t

Parses expression statements

val parse_if_else : Ast.stmt Angstrom.t -> Ast.stmt Angstrom.t

parse_if_else body parses if-else statements with given body parser

val parse_for : Ast.stmt Angstrom.t -> Ast.stmt Angstrom.t

parse_for body parses for loops with given body parser

val parse_while : Ast.stmt Angstrom.t -> Ast.stmt Angstrom.t

parse_while body parses while loops with given body parser

val parse_return : Ast.stmt Angstrom.t

Parses return statements

val parse_break : Ast.stmt Angstrom.t

Parses break statements

val parse_continue : Ast.stmt Angstrom.t

Parses continue statements

val parse_block : Ast.stmt Angstrom.t

Parses block statements (enclosed in {

}

)

Class and program parsers

val parse_var : Ast.var_decl Angstrom.t

Parses variable declarations (type + identifier)

val parse_field_sign : (Ast.modifier list * Ast.var_type * Ast.ident * Ast.expr option) Angstrom.t

Parses field signatures (modifiers, type, identifier, optional initializer)

val parse_method_sign : (Ast.modifier list * Ast._type * Ast.ident * Ast.params) Angstrom.t

Parses method signatures (modifiers, return type, identifier, parameters)

val parse_method_member : Ast.field Angstrom.t

Parses complete method definitions

val parse_field_member : Ast.field Angstrom.t

Parses complete field definitions

val parse_class_members : Ast.field list Angstrom.t

Parses class members (fields and methods) enclosed in braces

val parse_class : Ast.c_sharp_class Angstrom.t

Parses complete class definitions

val parse_prog : Ast.program Angstrom.t

Parses complete programs

Utility functions

val apply_parser : 'a Angstrom.t -> string -> ('a, string) Stdlib.result

apply_parser parser str applies parser to string and returns result

val parse_option : 'a Angstrom.t -> string -> 'a option

parse_option parser str tries to parse and returns option

Chain combinators

val chainl1 : 'a Angstrom.t -> ('a -> 'a -> 'a) Angstrom.t -> 'a Angstrom.t

Left-associative chaining combinator

val chainr1 : 'a Angstrom.t -> ('a -> 'a -> 'a) Angstrom.t -> 'a Angstrom.t

Right-associative chaining combinator