$ make hello
cc hello.c -o hello
And you end up with an executable.
However, I was surprised when I tried the following for a yacc grammar (again there is no makefile):
$ make foo
mv -f y.tab.c foo.c
cc foo.c -o foo
Also, in relation to Yacc, here is a footnote from the O'Reilly Lex & Yacc book:
Yacc's use of dot to show where you are in the rule can get confusing if you have rules with dots in them. Some versions of yacc use an underscore rather than a dot, which can be equally confusing if you have rules with underscores in them.
I have a feeling that you could keep going on like this.