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> if_stmt_without_else
|
||||
%type <node> if_stmt
|
||||
%type <node> alt_if_stmt_without_else
|
||||
%type <node> alt_if_stmt
|
||||
|
||||
%%
|
||||
|
||||
@ -270,24 +272,45 @@ inner_statement:
|
||||
statement:
|
||||
'{' inner_statement_list '}' { $$ = $2; }
|
||||
| if_stmt { $$ = $1; }
|
||||
| alt_if_stmt { $$ = $1; }
|
||||
| T_DO statement T_WHILE '(' expr ')' ';' { $$ = Node("Do While").append($2).append($5)}
|
||||
| expr ';' { $$ = $1; }
|
||||
|
||||
if_stmt_without_else:
|
||||
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
|
||||
{
|
||||
$$ = $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_without_else %prec T_NOELSE { $$ = $1; }
|
||||
| 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 = `<?
|
||||
|
||||
if ($a > $b) {
|
||||
if ($a > $b) :
|
||||
$b=$c;
|
||||
} elseif ($a === $b) {
|
||||
elseif ($a === $b) :
|
||||
|
||||
} else {
|
||||
else :
|
||||
|
||||
}
|
||||
endif;
|
||||
|
||||
`
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user