vicis_core/ir/module/name/
parser.rs1use super::Name;
2use crate::ir::util::{spaces, string_literal};
3use nom::{
4 branch::alt, bytes::complete::take_while1, character::complete::digit1, combinator::map,
5 error::VerboseError, sequence::preceded, IResult,
6};
7
8pub fn parse(source: &str) -> IResult<&str, Name, VerboseError<&str>> {
9 preceded(
10 spaces,
11 alt((
12 map(digit1, |i: &str| Name::Number(i.parse().unwrap())),
13 map(identifier, |n: &str| Name::Name(n.to_string())),
14 map(string_literal, Name::Name),
15 )),
16 )(source)
17}
18
19pub fn identifier(source: &str) -> IResult<&str, &str, VerboseError<&str>> {
20 take_while1(|c: char| c.is_alphanumeric() || c == '.' || c == '_')(source)
21}