Marwes
combine-language
Rust

A crate which defines parsers for common programming language constructs using https://github.com/Marwes/combine

Last updated Oct 3, 2025
92
Stars
7
Forks
2
Issues
0
Stars/day
Attention Score
13
Language breakdown
Rust 100.0%
โ–ธ Files click to expand
README

combine-language

Build Status Docs v2 Docs Gitter

This a crate providing an easy way of constructing parsers which can easily parse various programming languages. It has much of the same API as Text.Parsec.Token but are otherwise a bit different to fit in to the ownership model of rust. The crate is an extension of the combine crate.

Example

extern crate combine;
extern crate combine_language;
use combine::{satisfy, EasyParser, Parser};
use combine::parser::char::{alpha_num, letter, string};
use combine_language::{Identifier, LanguageEnv, LanguageDef};
fn main() {
    let env = LanguageEnv::new(LanguageDef {
        ident: Identifier {
            start: letter(),
            rest: alpha_num(),
            reserved: ["if", "then", "else", "let", "in", "type"].iter()
                                                                 .map(|x| (*x).into())
                                                                 .collect(),
        },
        op: Identifier {
            start: satisfy(|c| "+-*/".chars().any(|x| x == c)),
            rest: satisfy(|c| "+-*/".chars().any(|x| x == c)),
            reserved: ["+", "-", "", "/"].iter().map(|x| (x).into()).collect()
        },
        commentstart: string("/*").map(|| ()),
        commentend: string("*/").map(|| ()),
        commentline: string("//").map(|| ()),
    });
    let id = env.identifier();//An identifier parser
    let integer = env.integer();//An integer parser
    let result = (id, integer).easy_parse("this / Skips comments / 42");
    assert_eq!(result, Ok(((String::from("this"), 42), "")));
}

Links

combine

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท Marwes/combine-language ยท Updated daily from GitHub