Add using namespace parts to scanner and parser
This commit is contained in:
parent
db60be0af3
commit
81e4429585
@ -137,12 +137,19 @@ fundef_or_decl() ->
|
|||||||
fundef()]).
|
fundef()]).
|
||||||
|
|
||||||
using() ->
|
using() ->
|
||||||
?RULE(keyword(using), con(), optional({keyword(as), con()}), using(get_ann(_1), _2, _3)).
|
Alias = {keyword(as), con()},
|
||||||
|
For = ?RULE(keyword(for), bracket_list(id()), {for, _2}),
|
||||||
|
Hiding = ?RULE(keyword(hiding), bracket_list(id()), {hiding, _2}),
|
||||||
|
?RULE(keyword(using), con(), optional(Alias), optional(choice(For, Hiding)), using(get_ann(_1), _2, _3, _4)).
|
||||||
|
|
||||||
using(Ann, Con, none) ->
|
using(Ann, Con, none, none) ->
|
||||||
{using, Ann, Con, none};
|
{using, Ann, Con, none, none};
|
||||||
using(Ann, Con, {ok, {_, Alias}}) ->
|
using(Ann, Con, {ok, {_, Alias}}, none) ->
|
||||||
{using, Ann, Con, Alias}.
|
{using, Ann, Con, Alias, none};
|
||||||
|
using(Ann, Con, none, {ok, List}) ->
|
||||||
|
{using, Ann, Con, none, List};
|
||||||
|
using(Ann, Con, {ok, {_, Alias}}, {ok, List}) ->
|
||||||
|
{using, Ann, Con, Alias, List}.
|
||||||
|
|
||||||
pragma() ->
|
pragma() ->
|
||||||
Op = choice([token(T) || T <- ['<', '=<', '==', '>=', '>']]),
|
Op = choice([token(T) || T <- ['<', '=<', '==', '>=', '>']]),
|
||||||
|
@ -45,7 +45,7 @@ lexer() ->
|
|||||||
|
|
||||||
Keywords = ["contract", "include", "let", "switch", "type", "record", "datatype", "if", "elif", "else", "function",
|
Keywords = ["contract", "include", "let", "switch", "type", "record", "datatype", "if", "elif", "else", "function",
|
||||||
"stateful", "payable", "true", "false", "mod", "public", "entrypoint", "private", "indexed", "namespace",
|
"stateful", "payable", "true", "false", "mod", "public", "entrypoint", "private", "indexed", "namespace",
|
||||||
"interface", "main", "using", "as"
|
"interface", "main", "using", "as", "for", "hiding"
|
||||||
],
|
],
|
||||||
KW = string:join(Keywords, "|"),
|
KW = string:join(Keywords, "|"),
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
-type tvar() :: {tvar, ann(), name()}.
|
-type tvar() :: {tvar, ann(), name()}.
|
||||||
|
|
||||||
-type namespace_alias() :: none | con().
|
-type namespace_alias() :: none | con().
|
||||||
|
-type namespace_parts() :: none | {for, [id()]} | {hiding, [id()]}.
|
||||||
|
|
||||||
-type decl() :: {contract_main, ann(), con(), [decl()]}
|
-type decl() :: {contract_main, ann(), con(), [decl()]}
|
||||||
| {contract_child, ann(), con(), [decl()]}
|
| {contract_child, ann(), con(), [decl()]}
|
||||||
@ -46,7 +47,7 @@
|
|||||||
| {type_def, ann(), id(), [tvar()], typedef()}
|
| {type_def, ann(), id(), [tvar()], typedef()}
|
||||||
| {fun_clauses, ann(), id(), type(), [letfun() | fundecl()]}
|
| {fun_clauses, ann(), id(), type(), [letfun() | fundecl()]}
|
||||||
| {block, ann(), [decl()]}
|
| {block, ann(), [decl()]}
|
||||||
| {using, ann(), con(), namespace_alias()}
|
| {using, ann(), con(), namespace_alias(), namespace_parts()}
|
||||||
| fundecl()
|
| fundecl()
|
||||||
| letfun()
|
| letfun()
|
||||||
| letval(). % Only for error msgs
|
| letval(). % Only for error msgs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user