Rust에서 처음부터 정규식 엔진 만들기.
3960 단어 regexjavascriptrustwatercoler
원래 라이브러리에서 원하는 기능 중 하나를 만드는 방법을 알 수 없었습니다.
이 문제를 완화하기 위해 Rust 버전을 만들 때 JavaScript 기반의 정규식 엔진을 만드는 데 손을 대야겠다고 생각했습니다.
내가 지금까지 가지고 있는 것.
나는
chars.rs
와 REChar
를 포함하는 REString
를 가지고 있는데 전자는 정규식에서 문자를 표현한 것입니다.나는
pattern.rs
및 PatternType
와 같은 패턴에 대한 정보를 포함하는 PatternSize
를 가지고 있습니다.패턴 유형
다음은 패턴 유형입니다. 내 엔진에서 세 가지 패턴만 지원할 계획입니다(현재로서는).
enum PatternType {
NoneOf(REString), // Same as JS /[^xyz]/.
AnyOf(REString), // Same as JS /[xyz]/.
Char(REChar) // Same as JS /x/.
}
이들은 각각
[^xyz]
, [xyz]
및 x
와 동일합니다.패턴 크기
다음은 패턴의 크기입니다. 4가지 고유 크기만 지원됩니다.
enum PatterSize {
OoM, // Short for "One or More".
// Same as JS /x+/.
ZoM, // Short for "Zero or More".
// Same as JS /x*/.
ZoO, // Short for "Zero or One".
// Same as JS /x?/.
N(usize), // Represents a N-repetitions.
// Same as JS /x{N}/ where `N = int > 0`.
}
이들은 각각
/x+/
, /x*
, x?
및 x{1}
와 동일합니다.플래그
정규식에서 지원되는 플래그는 다음과 같습니다.
struct Flags {
case_insensitive:bool, // Same as JS /x/i.
multiline:bool, // Same as JS /x/m.
global:bool, // Same as JS /x/g.
}
이들은 각각 the
i
, m
, and g
flags에 해당합니다.분석기 전.
정규 표현식에 대한 렉서 작업을 하기 전에 먼저 matching 문자열과 여러 개의
Pattern
s에 대한 일치 시스템 작업을 하고 싶다고 생각합니다.지금까지 어떻게 진행되고 있는지.
일이 잘되고 있다고 생각하고 이 일을 하게 되어 정말 기쁩니다.
내가 만드는 기술이 실제로 작동하는 모습을 볼 수 있기를 기대합니다!
읽어주셔서 감사합니다!건배!
Reference
이 문제에 관하여(Rust에서 처음부터 정규식 엔진 만들기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/baenencalin/making-a-regex-engine-in-rust-from-scratch-in-rust-1b0c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)