Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit 5caaaae

Browse files
committed
实现对using ns语句的支持,增强命名空间导入功能,允许解析命名空间路径并处理错误情况。
1 parent ae22e7a commit 5caaaae

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/parser/statement_parser.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,36 @@ pub trait StatementParser {
2020
impl<'a> StatementParser for ParserBase<'a> {
2121
fn parse_statement(&mut self) -> Result<Statement, String> {
2222
if let Some(token) = self.peek() {
23+
// 支持 using ns xxx; 语句
24+
if token == "using" {
25+
self.consume(); // 消费 using
26+
if self.peek() == Some(&"ns".to_string()) {
27+
self.consume(); // 消费 ns
28+
// 解析命名空间路径
29+
let mut path = Vec::new();
30+
let mut expect_id = true;
31+
while let Some(tok) = self.peek() {
32+
if expect_id {
33+
// 期望标识符
34+
if tok.chars().all(|c| c.is_alphanumeric() || c == '_') {
35+
path.push(self.consume().unwrap());
36+
expect_id = false;
37+
} else {
38+
break;
39+
}
40+
} else if tok == "::" {
41+
self.consume();
42+
expect_id = true;
43+
} else {
44+
break;
45+
}
46+
}
47+
self.expect(";")?;
48+
return Ok(Statement::ImportNamespace(crate::ast::NamespaceType::Code, path));
49+
} else {
50+
return Err("不支持的using语句,仅支持using ns".to_string());
51+
}
52+
}
2353
match token.as_str() {
2454
"return" => {
2555
self.consume(); // 消费 "return" 关键字

0 commit comments

Comments
 (0)