parse AltIf stmt
This commit is contained in:
parent
668a6ed287
commit
bd731b28d5
37
parser.y
37
parser.y
@ -200,6 +200,8 @@ func (n node) attribute(key string, value string) node {
|
|||||||
%type <node> simple_variable
|
%type <node> simple_variable
|
||||||
%type <node> if_stmt_without_else
|
%type <node> if_stmt_without_else
|
||||||
%type <node> if_stmt
|
%type <node> if_stmt
|
||||||
|
%type <node> alt_if_stmt_without_else
|
||||||
|
%type <node> alt_if_stmt
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
@ -270,24 +272,45 @@ inner_statement:
|
|||||||
statement:
|
statement:
|
||||||
'{' inner_statement_list '}' { $$ = $2; }
|
'{' inner_statement_list '}' { $$ = $2; }
|
||||||
| if_stmt { $$ = $1; }
|
| if_stmt { $$ = $1; }
|
||||||
|
| alt_if_stmt { $$ = $1; }
|
||||||
| T_DO statement T_WHILE '(' expr ')' ';' { $$ = Node("Do While").append($2).append($5)}
|
| T_DO statement T_WHILE '(' expr ')' ';' { $$ = Node("Do While").append($2).append($5)}
|
||||||
| expr ';' { $$ = $1; }
|
| expr ';' { $$ = $1; }
|
||||||
|
|
||||||
if_stmt_without_else:
|
if_stmt_without_else:
|
||||||
T_IF '(' expr ')' statement
|
T_IF '(' expr ')' statement
|
||||||
{
|
{
|
||||||
$$ = Node("if").append(Node("expr").append($3)).append(Node("stmt").append($5))
|
$$ = Node("If").append(Node("expr").append($3)).append(Node("stmt").append($5))
|
||||||
}
|
}
|
||||||
| if_stmt_without_else T_ELSEIF '(' expr ')' statement
|
| if_stmt_without_else T_ELSEIF '(' expr ')' statement
|
||||||
{
|
{
|
||||||
$$ = $1.append(Node("elseif").append(Node("expr").append($4)).append(Node("stmt").append($6)))
|
$$ = $1.append(Node("ElseIf").append(Node("expr").append($4)).append(Node("stmt").append($6)))
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
if_stmt:
|
if_stmt:
|
||||||
if_stmt_without_else %prec T_NOELSE { $$ = $1; }
|
if_stmt_without_else %prec T_NOELSE { $$ = $1; }
|
||||||
| if_stmt_without_else T_ELSE statement
|
| if_stmt_without_else T_ELSE statement
|
||||||
{
|
{
|
||||||
$$ = $1.append(Node("else").append(Node("stmt").append($3)))
|
$$ = $1.append(Node("Else").append(Node("stmt").append($3)))
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
alt_if_stmt_without_else:
|
||||||
|
T_IF '(' expr ')' ':' inner_statement_list
|
||||||
|
{
|
||||||
|
$$ = Node("AltIf").append(Node("expr").append($3)).append(Node("stmt").append($6))
|
||||||
|
}
|
||||||
|
| alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list
|
||||||
|
{
|
||||||
|
$$ = $1.append(Node("AltElseIf").append(Node("expr").append($4)).append(Node("stmt").append($7)))
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
alt_if_stmt:
|
||||||
|
alt_if_stmt_without_else T_ENDIF ';' { $$ = $1; }
|
||||||
|
| alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';'
|
||||||
|
{
|
||||||
|
$$ = $1.append(Node("AltElse").append(Node("stmt").append($4)))
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -484,13 +507,13 @@ simple_variable:
|
|||||||
|
|
||||||
const src = `<?
|
const src = `<?
|
||||||
|
|
||||||
if ($a > $b) {
|
if ($a > $b) :
|
||||||
$b=$c;
|
$b=$c;
|
||||||
} elseif ($a === $b) {
|
elseif ($a === $b) :
|
||||||
|
|
||||||
} else {
|
else :
|
||||||
|
|
||||||
}
|
endif;
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user