G: introduce names

This commit is contained in:
Aleksey Kladov 2018-02-10 14:00:23 +03:00
parent c3b009b6d2
commit fc0a9e266b
7 changed files with 42 additions and 18 deletions

View File

@ -118,5 +118,7 @@ Grammar(
"LIFETIME_PARAM", "LIFETIME_PARAM",
"TYPE_PARAM", "TYPE_PARAM",
"ABI", "ABI",
"NAME",
"NAME_REF",
] ]
) )

View File

@ -196,8 +196,9 @@ fn extern_crate_item(p: &mut Parser) {
p.bump(); p.bump();
assert!(p.at(CRATE_KW)); assert!(p.at(CRATE_KW));
p.bump(); p.bump();
name(p);
p.expect(IDENT) && alias(p) && p.expect(SEMI); alias(p);
p.expect(SEMI);
} }
fn extern_block(p: &mut Parser) { fn extern_block(p: &mut Parser) {

View File

@ -44,12 +44,22 @@ fn alias(p: &mut Parser) -> bool {
if p.at(AS_KW) { if p.at(AS_KW) {
let alias = p.start(); let alias = p.start();
p.bump(); p.bump();
p.expect(IDENT); name(p);
alias.complete(p, ALIAS); alias.complete(p, ALIAS);
} }
true //FIXME: return false if three are errors true //FIXME: return false if three are errors
} }
fn name(p: &mut Parser) {
if p.at(IDENT) {
let m = p.start();
p.bump();
m.complete(p, NAME);
} else {
p.error("expected a name");
}
}
fn error_block(p: &mut Parser, message: &str) { fn error_block(p: &mut Parser, message: &str) {
assert!(p.at(L_CURLY)); assert!(p.at(L_CURLY));
let err = p.start(); let err = p.start();

View File

@ -116,6 +116,8 @@ pub enum SyntaxKind {
LIFETIME_PARAM, LIFETIME_PARAM,
TYPE_PARAM, TYPE_PARAM,
ABI, ABI,
NAME,
NAME_REF,
// Technical SyntaxKinds: they appear temporally during parsing, // Technical SyntaxKinds: they appear temporally during parsing,
// but never end up in the final tree // but never end up in the final tree
@ -239,6 +241,8 @@ impl SyntaxKind {
LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" }, LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" }, TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" },
ABI => &SyntaxInfo { name: "ABI" }, ABI => &SyntaxInfo { name: "ABI" },
NAME => &SyntaxInfo { name: "NAME" },
NAME_REF => &SyntaxInfo { name: "NAME_REF" },
TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
EOF => &SyntaxInfo { name: "EOF" }, EOF => &SyntaxInfo { name: "EOF" },

View File

@ -3,7 +3,8 @@ FILE@[0; 18)
EXTERN_KW@[0; 6) EXTERN_KW@[0; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
CRATE_KW@[7; 12) CRATE_KW@[7; 12)
WHITESPACE@[12; 13) NAME@[12; 16)
IDENT@[13; 16) "foo" WHITESPACE@[12; 13)
IDENT@[13; 16) "foo"
SEMI@[16; 17) SEMI@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)

View File

@ -3,20 +3,23 @@ FILE@[0; 43)
EXTERN_KW@[0; 6) EXTERN_KW@[0; 6)
WHITESPACE@[6; 7) WHITESPACE@[6; 7)
CRATE_KW@[7; 12) CRATE_KW@[7; 12)
WHITESPACE@[12; 13) NAME@[12; 16)
IDENT@[13; 16) "foo" WHITESPACE@[12; 13)
IDENT@[13; 16) "foo"
SEMI@[16; 17) SEMI@[16; 17)
WHITESPACE@[17; 18) WHITESPACE@[17; 18)
EXTERN_CRATE_ITEM@[18; 43) EXTERN_CRATE_ITEM@[18; 43)
EXTERN_KW@[18; 24) EXTERN_KW@[18; 24)
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
CRATE_KW@[25; 30) CRATE_KW@[25; 30)
WHITESPACE@[30; 31) NAME@[30; 35)
IDENT@[31; 34) "foo" WHITESPACE@[30; 31)
ALIAS@[34; 41) IDENT@[31; 34) "foo"
WHITESPACE@[34; 35) WHITESPACE@[34; 35)
ALIAS@[35; 41)
AS_KW@[35; 37) AS_KW@[35; 37)
WHITESPACE@[37; 38) NAME@[37; 41)
IDENT@[38; 41) "bar" WHITESPACE@[37; 38)
IDENT@[38; 41) "bar"
SEMI@[41; 42) SEMI@[41; 42)
WHITESPACE@[42; 43) WHITESPACE@[42; 43)

View File

@ -9,8 +9,9 @@ FILE@[0; 55)
WHITESPACE@[7; 8) WHITESPACE@[7; 8)
ALIAS@[8; 14) ALIAS@[8; 14)
AS_KW@[8; 10) AS_KW@[8; 10)
WHITESPACE@[10; 11) NAME@[10; 14)
IDENT@[11; 14) "bar" WHITESPACE@[10; 11)
IDENT@[11; 14) "bar"
SEMI@[14; 15) SEMI@[14; 15)
WHITESPACE@[15; 16) WHITESPACE@[15; 16)
USE_ITEM@[16; 55) USE_ITEM@[16; 55)
@ -29,8 +30,9 @@ FILE@[0; 55)
WHITESPACE@[27; 28) WHITESPACE@[27; 28)
ALIAS@[28; 32) ALIAS@[28; 32)
AS_KW@[28; 30) AS_KW@[28; 30)
WHITESPACE@[30; 31) NAME@[30; 32)
IDENT@[31; 32) "b" WHITESPACE@[30; 31)
IDENT@[31; 32) "b"
COMMA@[32; 33) COMMA@[32; 33)
USE_TREE@[33; 35) USE_TREE@[33; 35)
WHITESPACE@[33; 34) WHITESPACE@[33; 34)
@ -50,8 +52,9 @@ FILE@[0; 55)
WHITESPACE@[47; 48) WHITESPACE@[47; 48)
ALIAS@[48; 52) ALIAS@[48; 52)
AS_KW@[48; 50) AS_KW@[48; 50)
WHITESPACE@[50; 51) NAME@[50; 52)
IDENT@[51; 52) "x" WHITESPACE@[50; 51)
IDENT@[51; 52) "x"
R_CURLY@[52; 53) R_CURLY@[52; 53)
SEMI@[53; 54) SEMI@[53; 54)
WHITESPACE@[54; 55) WHITESPACE@[54; 55)