stel ik heb de volgende (simpele) grammatica:
Alleen als ik nou a.b(c) parse, dan krijg ik deze boom:
terwijl dat natuurlijk dit moet zijn:
Alles goed en wel, gewoon even de precedence definieren in bison:
alleen dat helpt dus niet! Hij verkiest nog altijd de function call boven de . operator
Weet iemand hoe ik dit op kan lossen?
.edit: oh misschien wel handig om erbij te vermelden dat die . operator natuurlijk bedoeld is voor member selection als in C++/java/<insert random semi-OO-taal>
code:
1
2
3
4
5
6
| expression
: expression '.' expression
| expression '(' expression ')'
| constant
| identifier
; |
Alleen als ik nou a.b(c) parse, dan krijg ik deze boom:
code:
1
2
3
4
5
6
7
| operator .
|
+- a
+- function call
|
+- b
+- c |
offtopic:
grrr waarom zijn die edit boxjes niet meer monospaced
grrr waarom zijn die edit boxjes niet meer monospaced
terwijl dat natuurlijk dit moet zijn:
code:
1
2
3
4
5
6
7
| function call | +- operator . | | | +- a | +- b +- c |
Alles goed en wel, gewoon even de precedence definieren in bison:
code:
1
2
3
4
5
6
7
8
9
10
| %left FUNCCALL
%left '.'
%%
expression
: expression '.' expression
| expression '(' expression ')' %prec FUNCCALL
| constant
| identifier
; |
alleen dat helpt dus niet! Hij verkiest nog altijd de function call boven de . operator
Weet iemand hoe ik dit op kan lossen?
.edit: oh misschien wel handig om erbij te vermelden dat die . operator natuurlijk bedoeld is voor member selection als in C++/java/<insert random semi-OO-taal>
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.