refactoring the grammar
This commit is contained in:
@@ -20,22 +20,19 @@ var_decl = { type_expr ~ mutable? ~ identifier }
|
|||||||
// ================= TOP LEVEL =================
|
// ================= TOP LEVEL =================
|
||||||
|
|
||||||
attribute = {
|
attribute = {
|
||||||
"#" ~ "[" ~ (structured_style | list_style | key_value_style | simple_style) ~ "]"
|
"#" ~ "[" ~ (structured_style | list_style | pair_attr | simple_style) ~ "]"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Simple: #[test]
|
// Simple: #[test]
|
||||||
simple_style = { identifier }
|
simple_style = { static_path }
|
||||||
|
|
||||||
// Key-Value: #[crate_type = "lib"]
|
|
||||||
key_value_style = { identifier ~ "=" ~ primary }
|
|
||||||
|
|
||||||
// #[derive(PartialEq, PartialOrd)]
|
// #[derive(PartialEq, PartialOrd)]
|
||||||
list_style = { identifier ~ "(" ~ identifier ~ ("," ~ identifier)* ~ ","? ~ ")" }
|
list_style = { static_path ~ "(" ~ identifier ~ ("," ~ identifier)* ~ ","? ~ ")" }
|
||||||
|
|
||||||
// #[link(name = "readline")]
|
// #[link(name = "readline")]
|
||||||
structured_style = { identifier ~ "(" ~ pair ~ ("," ~ pair)* ~ ","? ~ ")" }
|
structured_style = { static_path ~ "(" ~ pair_attr ~ ("," ~ pair_attr)* ~ ","? ~ ")" }
|
||||||
|
|
||||||
pair = { identifier ~ "=" ~ primary }
|
pair_attr = { identifier ~ "=" ~ primary }
|
||||||
|
|
||||||
top_level = { attribute* ~ (import | function_decl | struct_decl) }
|
top_level = { attribute* ~ (import | function_decl | struct_decl) }
|
||||||
|
|
||||||
|
|||||||
+12
-4
@@ -1,6 +1,7 @@
|
|||||||
use parser::ast::{
|
use parser::ast::{
|
||||||
BinaryOp, Block, Expression, IfStmt, Literal, Postfix, Prefix, Statement, StaticPath, TopLevel,
|
BinaryOp, Block, Expression, IfStmt, Literal, Postfix, Prefix, Statement, StaticPath, TopLevel,
|
||||||
TypeExpr, TypeExprKind, TypePostfix, VarAssignStmt, VarDecl, VarDeclStmt, WhileStmt,
|
TopLevelKind, TypeExpr, TypeExprKind, TypePostfix, VarAssignStmt, VarDecl, VarDeclStmt,
|
||||||
|
WhileStmt,
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -226,13 +227,19 @@ impl ToRust for Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ToRust for TopLevel {
|
impl ToRust for TopLevel {
|
||||||
|
fn to_rust(&self, cg: &mut RustCodegen) {
|
||||||
|
self.0.to_rust(cg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ToRust for TopLevelKind {
|
||||||
fn to_rust(&self, cg: &mut RustCodegen) {
|
fn to_rust(&self, cg: &mut RustCodegen) {
|
||||||
match self {
|
match self {
|
||||||
TopLevel::Include(path) => {
|
Self::Include(path) => {
|
||||||
cg.addln(&format!("use {};", path.get_rust()));
|
cg.addln(&format!("use {};", path.get_rust()));
|
||||||
}
|
}
|
||||||
|
|
||||||
TopLevel::StructDecl {
|
Self::StructDecl {
|
||||||
export,
|
export,
|
||||||
name,
|
name,
|
||||||
fields,
|
fields,
|
||||||
@@ -250,7 +257,7 @@ impl ToRust for TopLevel {
|
|||||||
cg.addln("}\n");
|
cg.addln("}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
TopLevel::FunctionDecl {
|
Self::FunctionDecl {
|
||||||
export,
|
export,
|
||||||
name,
|
name,
|
||||||
params,
|
params,
|
||||||
@@ -278,6 +285,7 @@ impl ToRust for TopLevel {
|
|||||||
cg.indent -= 1;
|
cg.indent -= 1;
|
||||||
cg.addln("}\n");
|
cg.addln("}\n");
|
||||||
}
|
}
|
||||||
|
Self::EOI => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user