I would try a grammar with a structure along the lines of:
block:
| expr
expr:
| expr LPAREN argument_list RPAREN
| expr DOT unrestricted_name
| simple_expr
simple_expr:
| IDENTIFIER
Note that if you want to parse a full sentence, and not just a valid prefix of the input, your toplevel rule should request the EOF token to be present (to force the parser to go to the end of the input):
%start <block> main
main:
| b=block EOF { b }