Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
scie
提交
c761f25a
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 搜索 >>
未验证
提交
c761f25a
编写于
8月 23, 2020
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: make trait works
上级
fe1ef03e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
8 deletion
+44
-8
scie-grammar/src/grammar/grammar/mod.rs
scie-grammar/src/grammar/grammar/mod.rs
+39
-3
scie-grammar/src/rule.rs
scie-grammar/src/rule.rs
+5
-5
未找到文件。
scie-grammar/src/grammar/grammar/mod.rs
浏览文件 @
c761f25a
use
crate
::
inter
::
IRawGrammar
;
use
crate
::
rule
::
RuleFactory
;
use
crate
::
inter
::
{
IRawGrammar
,
IRawRepository
,
ILocation
}
;
use
crate
::
rule
::
{
RuleFactory
,
IRuleFactoryHelper
,
IGrammarRegistry
,
IRuleRegistry
,
Rule
}
;
use
onig
::
*
;
pub
struct
StackElement
{}
...
...
@@ -67,7 +67,7 @@ impl Grammar {
)
{
if
self
.root_id
==
-
1
{
let
repository
=
self
.grammar.repository
.clone
()
.unwrap
();
RuleFactory
::
get_compiled_rule_id
(
repository
);
RuleFactory
::
get_compiled_rule_id
(
repository
,
Box
::
new
(
self
.clone
())
);
}
}
...
...
@@ -77,3 +77,39 @@ impl Grammar {
pub
fn
tokenize_line2
(
&
self
,
line_text
:
String
,
prev_state
:
Option
<
StackElement
>
)
{}
}
impl
IRuleFactoryHelper
for
Grammar
{}
impl
IGrammarRegistry
for
Grammar
{
fn
get_external_grammar
(
&
self
,
scope_name
:
String
,
repository
:
IRawRepository
)
->
Option
<
IRawGrammar
>
{
None
}
}
impl
IRuleRegistry
for
Grammar
{
fn
get_rule
(
&
self
,
pattern_id
:
i32
)
->
Rule
{
Rule
::
new
(
ILocation
::
new
(),
pattern_id
,
None
,
None
)
}
}
#[cfg(test)]
mod
tests
{
use
std
::
path
::
Path
;
use
std
::
fs
::
File
;
use
crate
::
inter
::
IRawGrammar
;
use
std
::
io
::
Read
;
use
crate
::
grammar
::
grammar
::
Grammar
;
#[test]
fn
should_enable_run_grammar
()
{
let
path
=
Path
::
new
(
"test-cases/first-mate/fixtures/c.json"
);
let
mut
file
=
File
::
open
(
path
)
.unwrap
();
let
mut
data
=
String
::
new
();
file
.read_to_string
(
&
mut
data
)
.unwrap
();
let
g
:
IRawGrammar
=
serde_json
::
from_str
(
&
data
)
.unwrap
();
let
grammar
=
Grammar
::
new
(
g
);
println!
(
"{:?}"
,
grammar
.root_id
);
}
}
scie-grammar/src/rule.rs
浏览文件 @
c761f25a
...
...
@@ -3,7 +3,7 @@ use crate::inter::{IRawRepository, IRawGrammar, ILocation};
pub
struct
RuleFactory
{}
impl
RuleFactory
{
pub
fn
get_compiled_rule_id
(
repository
:
IRawRepository
)
{}
pub
fn
get_compiled_rule_id
(
repository
:
IRawRepository
,
helper
:
Box
<&
dyn
IRuleFactoryHelper
>
)
{}
pub
fn
create_capture_rule
()
{}
}
...
...
@@ -22,9 +22,7 @@ impl Rule {
}
}
pub
trait
AbstractRule
{
}
pub
trait
AbstractRule
{}
pub
struct
IncludeOnlyRule
{
pub
rule
:
Rule
...
...
@@ -66,4 +64,6 @@ pub trait IRuleRegistry {
pub
trait
IGrammarRegistry
{
fn
get_external_grammar
(
&
self
,
scope_name
:
String
,
repository
:
IRawRepository
)
->
Option
<
IRawGrammar
>
;
}
\ No newline at end of file
}
pub
trait
IRuleFactoryHelper
:
IGrammarRegistry
+
IRuleRegistry
{}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录