Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
7655b3c0
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7655b3c0
编写于
12月 02, 2011
作者:
M
Marijn Haverbeke
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Stop lexing -1 as a single token
And remove the hack that made 1-1 work given that other hack. Issue #954
上级
64ce092c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
3 addition
and
62 deletion
+3
-62
src/comp/syntax/parse/lexer.rs
src/comp/syntax/parse/lexer.rs
+2
-49
src/comp/syntax/parse/parser.rs
src/comp/syntax/parse/parser.rs
+1
-13
未找到文件。
src/comp/syntax/parse/lexer.rs
浏览文件 @
7655b3c0
...
...
@@ -175,17 +175,6 @@ fn scan_exponent(rdr: reader) -> option::t<str> {
}
else
{
ret
none
::
<
str
>
;
}
}
fn
scan_dec_digits_with_prefix
(
rdr
:
reader
)
->
str
{
let
negative
=
false
;
if
rdr
.curr
()
==
'-'
{
negative
=
true
;
rdr
.bump
();
}
let
digits
=
scan_dec_digits
(
rdr
);
if
negative
{
str
::
unshift_char
(
digits
,
'-'
);
}
ret
digits
;
}
fn
scan_dec_digits
(
rdr
:
reader
)
->
str
{
let
c
=
rdr
.curr
();
let
rslt
:
str
=
""
;
...
...
@@ -220,7 +209,7 @@ fn scan_number(c: char, rdr: reader) -> token::token {
c
=
rdr
.curr
();
}
}
else
{
num_str
=
scan_dec_digits
_with_prefix
(
rdr
);
num_str
=
scan_dec_digits
(
rdr
);
accum_int
=
std
::
int
::
from_str
(
num_str
);
}
c
=
rdr
.curr
();
...
...
@@ -346,7 +335,7 @@ fn next_token_inner(rdr: reader) -> token::token {
ret
token
::
IDENT
(
interner
::
intern
::
<
str
>
(
*
rdr
.get_interner
(),
accum_str
),
is_mod_name
);
}
if
is_dec_digit
(
c
)
||
(
c
==
'-'
&&
is_dec_digit
(
rdr
.next
()))
{
if
is_dec_digit
(
c
)
{
ret
scan_number
(
c
,
rdr
);
}
fn
binop
(
rdr
:
reader
,
op
:
token
::
binop
)
->
token
::
token
{
...
...
@@ -743,42 +732,6 @@ fn gather_comments_and_literals(cm: codemap::codemap, path: str,
ret
{
cmnts
:
comments
,
lits
:
literals
};
}
// This is a stopgap fix. We will have to do better eventually (issue #954)
fn
maybe_untangle_minus_from_lit
(
r
:
reader
,
t
:
token
::
token
)
->
option
::
t
<
token
::
token
>
{
fn
check_str
(
r
:
reader
,
i
:
uint
)
->
option
::
t
<
uint
>
{
let
it
=
r
.get_interner
(),
s
=
interner
::
get
(
*
it
,
i
);
if
s
[
0
]
==
'-'
as
u8
{
some
(
interner
::
intern
(
*
it
,
str
::
slice
(
s
,
1u
,
str
::
byte_len
(
s
))))
}
else
{
none
}
}
alt
t
{
token
::
LIT_INT
(
v
)
{
if
v
<
0
{
ret
some
(
token
::
LIT_INT
(
-
v
));
}
}
token
::
LIT_UINT
(
v
)
{
if
v
>
0x7fffffffu
{
ret
some
(
token
::
LIT_UINT
(
-
(
v
as
int
)
as
uint
));
}
}
token
::
LIT_MACH_INT
(
m
,
v
)
{
if
v
<
0
{
ret
some
(
token
::
LIT_MACH_INT
(
m
,
-
v
));
}
}
token
::
LIT_FLOAT
(
s
)
{
alt
check_str
(
r
,
s
)
{
some
(
s
)
{
ret
some
(
token
::
LIT_FLOAT
(
s
));
}
_
{}
}
}
token
::
LIT_MACH_FLOAT
(
m
,
s
)
{
alt
check_str
(
r
,
s
)
{
some
(
s
)
{
ret
some
(
token
::
LIT_MACH_FLOAT
(
m
,
s
));
}
_
{}
}
}
_
{}
}
none
}
//
// Local Variables:
// mode: rust
...
...
src/comp/syntax/parse/parser.rs
浏览文件 @
7655b3c0
...
...
@@ -1180,24 +1180,12 @@ fn parse_more_binops(p: parser, lhs: @ast::expr, min_prec: int) ->
@
ast
::
expr
{
if
!
expr_has_value
(
lhs
)
{
ret
lhs
;
}
let
peeked
=
p
.peek
();
let
lit_after
=
alt
lexer
::
maybe_untangle_minus_from_lit
(
p
.get_reader
(),
peeked
)
{
some
(
tok
)
{
peeked
=
token
::
BINOP
(
token
::
MINUS
);
let
lit
=
@
{
node
:
lit_from_token
(
p
,
tok
),
span
:
p
.get_span
()};
some
(
mk_expr
(
p
,
p
.get_lo_pos
(),
p
.get_hi_pos
(),
ast
::
expr_lit
(
lit
)))
}
none
.
{
none
}
};
if
peeked
==
token
::
BINOP
(
token
::
OR
)
&&
p
.get_restriction
()
==
RESTRICT_NO_BAR_OP
{
ret
lhs
;
}
for
cur
:
op_spec
in
*
p
.get_prec_table
()
{
if
cur
.prec
>
min_prec
&&
cur
.tok
==
peeked
{
p
.bump
();
let
expr
=
alt
lit_after
{
some
(
ex
)
{
ex
}
_
{
parse_prefix_expr
(
p
)
}
};
let
expr
=
parse_prefix_expr
(
p
);
let
rhs
=
parse_more_binops
(
p
,
expr
,
cur
.prec
);
let
bin
=
mk_expr
(
p
,
lhs
.span.lo
,
rhs
.span.hi
,
ast
::
expr_binary
(
cur
.op
,
lhs
,
rhs
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录