Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
scie
提交
bbd2d195
S
scie
项目概览
Phodal
/
scie
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
scie
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
bbd2d195
编写于
8月 23, 2020
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: make rule basic parse
上级
e84b420c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
5 deletion
+33
-5
scie-grammar/src/grammar/grammar/mod.rs
scie-grammar/src/grammar/grammar/mod.rs
+8
-3
scie-grammar/src/rule.rs
scie-grammar/src/rule.rs
+25
-2
未找到文件。
scie-grammar/src/grammar/grammar/mod.rs
浏览文件 @
bbd2d195
...
...
@@ -38,6 +38,8 @@ pub trait IGrammar {
fn
tokenize_line2
(
line_text
:
String
,
prev_state
:
Option
<
StackElement
>
)
->
ITokenizeLineResult2
;
}
#[derive(Debug,
Clone)]
pub
struct
Grammar
{
root_id
:
i32
,
grammar
:
IRawGrammar
,
...
...
@@ -117,14 +119,17 @@ impl IGrammarRegistry for Grammar {
}
impl
IRuleRegistry
for
Grammar
{
fn
register_id
(
&
mut
self
)
->
i32
{
self
.last_rule_id
=
self
.last_rule_id
+
1
;
self
.last_rule_id
}
fn
get_rule
(
&
self
,
pattern_id
:
i32
)
->
Rule
{
Rule
::
new
(
ILocation
::
new
(),
pattern_id
,
None
,
None
)
}
fn
register_rule
(
&
mut
self
,
result
:
Box
<
dyn
AbstractRule
>
)
->
Box
<
dyn
AbstractRule
>
{
self
.last_rule_id
=
self
.last_rule_id
+
1
;
let
id
=
self
.last_rule_id
;
self
.rule_id2desc
.insert
(
id
.clone
(),
result
.clone
());
self
.rule_id2desc
.insert
(
self
.last_rule_id
.clone
(),
result
.clone
());
result
}
}
...
...
scie-grammar/src/rule.rs
浏览文件 @
bbd2d195
...
...
@@ -2,6 +2,7 @@ use crate::inter::{IRawRepository, IRawGrammar, ILocation, IRawRule, IRawCapture
use
dyn_clone
::{
clone_trait_object
,
DynClone
};
use
std
::
borrow
::
Borrow
;
use
crate
::
grammar
::
grammar
::
Grammar
;
use
core
::
fmt
;
pub
struct
RuleFactory
{}
...
...
@@ -14,9 +15,24 @@ impl RuleFactory {
pub
fn
get_compiled_rule_id
(
mut
desc
:
IRawRule
,
helper
:
&
mut
Grammar
,
repository
:
IRawRepository
)
->
i32
{
match
desc
.id
{
None
=>
{
let
id
=
helper
.register_id
();
desc
.id
=
Some
(
id
.clone
());
match
desc
.match_s
{
None
=>
{}
Some
(
match_s
)
=>
{
MatchRule
::
new
(
desc
.location
.clone
(),
id
.clone
(),
desc
.name
.clone
(),
match_s
.clone
(),
RuleFactory
::
_
compile_captures
(
desc
.captures
.clone
(),
helper
,
repository
.clone
()),
);
}
};
// helper.register_rule();
}
,
Some
(
_
)
=>
{}
,
}
Some
(
_
)
=>
{}
}
desc
.id
.unwrap
()
...
...
@@ -45,6 +61,12 @@ pub struct RegExpSource {}
pub
trait
AbstractRule
:
DynClone
{}
impl
fmt
::
Debug
for
dyn
AbstractRule
{
fn
fmt
(
&
self
,
f
:
&
mut
fmt
::
Formatter
)
->
fmt
::
Result
{
write!
(
f
,
"AbstractRule"
)
}
}
clone_trait_object!
(
AbstractRule
);
#[derive(Clone,
Debug)]
...
...
@@ -106,6 +128,7 @@ pub trait IRuleRegistry {
// type Output;
// fn method(&self) -> Self::Output;
fn
register_id
(
&
mut
self
)
->
i32
;
fn
get_rule
(
&
self
,
pattern_id
:
i32
)
->
Rule
;
fn
register_rule
(
&
mut
self
,
result
:
Box
<
dyn
AbstractRule
>
)
->
Box
<
dyn
AbstractRule
>
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录