我想同时解析f(arg).method
和;第一个比后者具有更高的优先级。f(arg)
block_statement
parser.mly
can't parse中的以下元素f(arg)
,但可以解析f(arg).method
如下:
(* f(arg).method *)
BS_MAE MAE_LE_UN (
LE_IE IE_LE_AL (
LE_SNE SNE_I f,
AL_I arg),
UN_I method)
(* parser.mly: *)
block_statement:
| member_access_expression { BS_MAE $1 }
simple_name_expression: | IDENTIFIER { SNE_I $1 }
member_access_expression: | l_expression DOT unrestricted_name { MAE_LE_UN ($1, $3) }
unrestricted_name: | IDENTIFIER { UN_I $1 }
index_expression: | l_expression LPAREN argument_list RPAREN { IE_LE_AL ($1, $3) }
expression: | l_expression { E_LE $1 }
l_expression:
| simple_name_expression { LE_SNE $1 }
| index_expression { LE_IE $1 }
call_statement:
| simple_name_expression argument_list { CallS_SNE_AL ($1, $2) }
| member_access_expression argument_list { CallS_MAE_AL ($1, $2) }
argument_list: | IDENTIFIER { AL_I $1 }
但是如果我们为 追加另一行| IDENTIFIER LPAREN expression RPAREN { BS_I_E ($1, $3) }
,block_statement
这一次它可以解析f(arg)
如下:
BS_I_E (
f,
E_LE LE_SNE SNE_I arg)
但是,这一次,f(arg).method
不能再解析了。读取后会引发错误.
f(arg).method
如果可能的话,我不知道如何让解析器进一步阅读。我真的需要解析器来解析这两个语句......有人可以帮忙吗?