peg 0.3.9

A parser generator built on the Parsing Expression Grammar (PEG) formalism.
extern crate syntax;

pub use syntax::ast;
pub use syntax::ptr::P;
pub use syntax::codemap::DUMMY_SP;
pub use syntax::ext::base::ExtCtxt;
pub use syntax::ast::{Mod, Item, Expr, TokenTree};
pub use syntax::parse::token::str_to_ident;
pub use syntax::ext::build::AstBuilder;
pub use syntax::print::pprust::{expr_to_string, item_to_string};

pub fn module(items: Vec<P<Item>>) -> P<Mod> {
	P(Mod{
		inner: DUMMY_SP,
		items: items,
	})
}

pub fn parse_path(ctxt: &ExtCtxt, e: &str) -> ast::Path {
	let mut p = syntax::parse::new_parser_from_source_str(&ctxt.parse_sess, Vec::new(), "<peg>".to_string(), e.to_string());
	let r = panictry!(p.parse_path(syntax::parse::parser::NoTypesAllowed));
	p.abort_if_errors();
	r
}

pub fn parse_path_vec(s: &str) -> Vec<ast::Ident> {
	s.split("::").map(|i| str_to_ident(i)).collect()
}

pub fn parse_block(ctxt: &ExtCtxt, e: &str) -> P<ast::Block> {
	let mut p = syntax::parse::new_parser_from_source_str(&ctxt.parse_sess, Vec::new(), "<peg>".to_string(), e.to_string());
	let r = panictry!(p.parse_block());
	p.abort_if_errors();
	r
}

pub fn parse_type(ctxt: &ExtCtxt, e: &str) -> P<ast::Ty> {
	let mut p = syntax::parse::new_parser_from_source_str(&ctxt.parse_sess, Vec::new(), "<peg>".to_string(), e.to_string());
	let r = panictry!(p.parse_ty());
	p.abort_if_errors();
	r
}