Skip to content

Commit 78d215b

Browse files
committed
[change] TokenSet が持つメソッドの命名を Syntax に合わせた
1 parent 75dd0c2 commit 78d215b

File tree

6 files changed

+28
-24
lines changed

6 files changed

+28
-24
lines changed

crates/algorithm_lr1/src/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ where
7272
let mut goto_table: Vec<Vec<usize>> = Vec::with_capacity(dfa.0.len());
7373
for _ in 0..dfa.0.len() {
7474
action_table.push(HashMap::from_iter(
75-
T::enum_iter()
75+
T::into_iter()
7676
.map(|token| (token, LRAction::None))
7777
.collect::<Vec<(T, LRAction<S>)>>(),
7878
));

crates/core/src/cfg/syntax.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ mod test {
244244
}
245245

246246
impl TokenSet<'_> for TestToken {
247-
fn enum_iter() -> impl Iterator<Item = Self> {
247+
fn into_iter() -> impl Iterator<Item = Self> {
248248
Box::new(
249249
vec![
250250
TestToken::Num,
@@ -259,7 +259,7 @@ mod test {
259259
)
260260
}
261261

262-
fn to_regex(&self) -> &'static str {
262+
fn into_regex_str(&self) -> &'static str {
263263
match self {
264264
TestToken::Num => r"^[1-9][0-9]*",
265265
TestToken::Plus => r"^\+",

crates/core/src/cfg/token.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
use std::fmt::Debug;
22
use std::hash::Hash;
33

4-
use regex::Regex;
4+
use regex::{Regex, RegexSet};
55

66
pub trait TokenSet<'a>
77
where
88
Self: Debug + Copy + Clone + Hash + Eq,
99
{
1010
fn ignore_str() -> &'a str;
11-
fn enum_iter() -> impl Iterator<Item = Self>;
12-
fn to_regex(&self) -> &'a str;
11+
fn into_iter() -> impl Iterator<Item = Self>;
12+
fn into_regex_str(&self) -> &'a str;
1313

14-
fn try_into() -> anyhow::Result<Vec<(Regex, Self)>> {
15-
Self::enum_iter()
16-
.map(|token| Ok((Regex::new(Self::to_regex(&token))?, token)))
17-
.collect::<anyhow::Result<Vec<_>>>()
14+
fn into_regex(&self) -> anyhow::Result<Regex> {
15+
Ok(Regex::new(self.into_regex_str())?)
16+
}
17+
18+
fn try_into_regexset() -> anyhow::Result<RegexSet> {
19+
let regex_set = Self::into_iter()
20+
.map(|token| Self::into_regex_str(&token))
21+
.collect::<Vec<_>>();
22+
23+
Ok(RegexSet::new(regex_set)?)
1824
}
1925
}

crates/core/src/lex.rs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ impl Lexer {
4141

4242
struct LexDriver<'a, 'b, T: TokenSet<'a>> {
4343
// Regex
44+
regex_istr: Regex,
4445
regex_set: RegexSet,
4546
regex_map: Vec<(Regex, T)>,
46-
regex_istr: Regex,
4747

4848
// State
4949
input: &'b str,
@@ -57,18 +57,16 @@ impl<'a, 'b, T: TokenSet<'a>> TryFrom<&'b str> for LexDriver<'a, 'b, T> {
5757
type Error = anyhow::Error;
5858

5959
fn try_from(input: &'b str) -> anyhow::Result<Self> {
60-
let regex_map = T::try_into()?;
61-
let regex_set = regex_map
62-
.iter()
63-
.map(|(_, token)| T::to_regex(&token))
64-
.collect::<Vec<_>>();
65-
let regex_set = RegexSet::new(regex_set)?;
6660
let regex_istr = Regex::new(T::ignore_str())?;
61+
let regex_set = T::try_into_regexset()?;
62+
let regex_map = T::into_iter()
63+
.map(|token| Ok((token.into_regex()?, token)))
64+
.collect::<anyhow::Result<Vec<_>>>()?;
6765

6866
Ok(LexDriver {
67+
regex_istr,
6968
regex_set,
7069
regex_map,
71-
regex_istr,
7270
input,
7371
pos: 0,
7472
tokenset: PhantomData,
@@ -126,11 +124,11 @@ mod test {
126124
r"^[ \t\n]+"
127125
}
128126

129-
fn enum_iter() -> Box<dyn Iterator<Item = Self>> {
130-
Box::new(vec![TestToken::Num, TestToken::Plus].into_iter())
127+
fn into_iter() -> impl Iterator<Item = Self> {
128+
vec![TestToken::Num, TestToken::Plus].into_iter()
131129
}
132130

133-
fn to_regex(&self) -> &'static str {
131+
fn into_regex_str(&self) -> &'static str {
134132
match self {
135133
TestToken::Num => r"^[1-9][0-9]*",
136134
TestToken::Plus => r"^\+",

crates/core_derive/src/impl/tokenset.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ pub fn proc_macro_impl(ast: DeriveInput) -> TokenStream {
3636
#enum_ignored
3737
}
3838

39-
fn enum_iter() -> impl Iterator<Item = Self> {
39+
fn into_iter() -> impl Iterator<Item = Self> {
4040
vec![
4141
#( #enum_variants, )*
4242
].into_iter()
4343
}
4444

45-
fn to_regex(&self) -> &'static str {
45+
fn into_regex_str(&self) -> &'static str {
4646
match self {
4747
#( #enum_regex_table, )*
4848
_ => unimplemented!(),

tests/derive.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ enum TestSyntax {
4242

4343
#[test]
4444
fn check_compile() {
45-
let _ = TestTokenSet::to_regex(&self::TestTokenSet::Plus);
45+
let _ = TestTokenSet::into_regex(&self::TestTokenSet::Plus);
4646
let _ = TestSyntax::into_rule(&self::TestSyntax::ExprPlus);
4747
}

0 commit comments

Comments
 (0)