lang: Move capitalized res identifier into parser
This gives us more specificity when trying to match exactly.
This commit is contained in:
@@ -369,13 +369,6 @@
|
|||||||
lval.str = yylex.Text()
|
lval.str = yylex.Text()
|
||||||
return RES_IDENTIFIER
|
return RES_IDENTIFIER
|
||||||
}
|
}
|
||||||
/[A-Z]([a-z0-9:]*[a-z0-9]+)?/
|
|
||||||
{
|
|
||||||
yylex.pos(lval) // our pos
|
|
||||||
s := yylex.Text()
|
|
||||||
lval.str = strings.ToLower(s) // uncapitalize it
|
|
||||||
return CAPITALIZED_RES_IDENTIFIER
|
|
||||||
}
|
|
||||||
/#[^\n]*/
|
/#[^\n]*/
|
||||||
{ // this matches a (#) pound char followed by any
|
{ // this matches a (#) pound char followed by any
|
||||||
// number of chars that aren't the (\n) newline!
|
// number of chars that aren't the (\n) newline!
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ func init() {
|
|||||||
%token STR_IDENTIFIER BOOL_IDENTIFIER INT_IDENTIFIER FLOAT_IDENTIFIER
|
%token STR_IDENTIFIER BOOL_IDENTIFIER INT_IDENTIFIER FLOAT_IDENTIFIER
|
||||||
%token MAP_IDENTIFIER STRUCT_IDENTIFIER VARIANT_IDENTIFIER VAR_IDENTIFIER
|
%token MAP_IDENTIFIER STRUCT_IDENTIFIER VARIANT_IDENTIFIER VAR_IDENTIFIER
|
||||||
%token VAR_IDENTIFIER_HX
|
%token VAR_IDENTIFIER_HX
|
||||||
%token RES_IDENTIFIER CAPITALIZED_RES_IDENTIFIER
|
%token RES_IDENTIFIER
|
||||||
%token IDENTIFIER CAPITALIZED_IDENTIFIER
|
%token IDENTIFIER CAPITALIZED_IDENTIFIER
|
||||||
%token FUNC_IDENTIFIER
|
%token FUNC_IDENTIFIER
|
||||||
%token CLASS_IDENTIFIER INCLUDE_IDENTIFIER
|
%token CLASS_IDENTIFIER INCLUDE_IDENTIFIER
|
||||||
@@ -1030,18 +1030,7 @@ edge_half_list:
|
|||||||
;
|
;
|
||||||
edge_half:
|
edge_half:
|
||||||
// eg: Test["t1"]
|
// eg: Test["t1"]
|
||||||
CAPITALIZED_RES_IDENTIFIER OPEN_BRACK expr CLOSE_BRACK
|
capitalized_res_identifier OPEN_BRACK expr CLOSE_BRACK
|
||||||
{
|
|
||||||
posLast(yylex, yyDollar) // our pos
|
|
||||||
$$.edgeHalf = &StmtEdgeHalf{
|
|
||||||
Kind: $1.str,
|
|
||||||
Name: $3.expr,
|
|
||||||
//SendRecv: "", // unused
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// note: this is a simplified version of the above if the lexer picks it
|
|
||||||
// note: must not include underscores, but that is checked after parsing
|
|
||||||
| CAPITALIZED_IDENTIFIER OPEN_BRACK expr CLOSE_BRACK
|
|
||||||
{
|
{
|
||||||
posLast(yylex, yyDollar) // our pos
|
posLast(yylex, yyDollar) // our pos
|
||||||
$$.edgeHalf = &StmtEdgeHalf{
|
$$.edgeHalf = &StmtEdgeHalf{
|
||||||
@@ -1053,18 +1042,7 @@ edge_half:
|
|||||||
;
|
;
|
||||||
edge_half_sendrecv:
|
edge_half_sendrecv:
|
||||||
// eg: Test["t1"].foo_send
|
// eg: Test["t1"].foo_send
|
||||||
CAPITALIZED_RES_IDENTIFIER OPEN_BRACK expr CLOSE_BRACK DOT IDENTIFIER
|
capitalized_res_identifier OPEN_BRACK expr CLOSE_BRACK DOT IDENTIFIER
|
||||||
{
|
|
||||||
posLast(yylex, yyDollar) // our pos
|
|
||||||
$$.edgeHalf = &StmtEdgeHalf{
|
|
||||||
Kind: $1.str,
|
|
||||||
Name: $3.expr,
|
|
||||||
SendRecv: $6.str,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// note: this is a simplified version of the above if the lexer picks it
|
|
||||||
// note: must not include underscores, but that is checked after parsing
|
|
||||||
| CAPITALIZED_IDENTIFIER OPEN_BRACK expr CLOSE_BRACK DOT IDENTIFIER
|
|
||||||
{
|
{
|
||||||
posLast(yylex, yyDollar) // our pos
|
posLast(yylex, yyDollar) // our pos
|
||||||
$$.edgeHalf = &StmtEdgeHalf{
|
$$.edgeHalf = &StmtEdgeHalf{
|
||||||
@@ -1176,6 +1154,18 @@ dotted_var_identifier:
|
|||||||
$$.str = $2.str
|
$$.str = $2.str
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
capitalized_res_identifier:
|
||||||
|
CAPITALIZED_IDENTIFIER
|
||||||
|
{
|
||||||
|
posLast(yylex, yyDollar) // our pos
|
||||||
|
$$.str = $1.str
|
||||||
|
}
|
||||||
|
| capitalized_res_identifier COLON IDENTIFIER
|
||||||
|
{
|
||||||
|
posLast(yylex, yyDollar) // our pos
|
||||||
|
$$.str = $1.str + ":" + $3.str
|
||||||
|
}
|
||||||
|
;
|
||||||
%%
|
%%
|
||||||
// pos is a helper function used to track the position in the parser.
|
// pos is a helper function used to track the position in the parser.
|
||||||
func pos(y yyLexer, dollar yySymType) {
|
func pos(y yyLexer, dollar yySymType) {
|
||||||
|
|||||||
Reference in New Issue
Block a user