Я пишу Flex/Bison Lexer/Parser, чтобы разобрать сценарий моего собственного дизайна в качестве задания для университета. Все идет очень хорошо, и мой скрипт правильно анализирует, обнаруживает любые ошибки и т. Д., И распознает токены, и передает семантические значения.
Однако я немного не уверен, как перевести это в полезную информацию... Мне просто нужно вывести простой текст, который сам по себе достаточно прост, однако я борюсь с логикой, где это сделать в yacc.
Например, скажем, мой yacc выглядит примерно так:
statement :
DRAW shape AT location { printf("Draw shape at location"); }
;
shape :
CUBE
| PYRAMID
| SPHERE
;
location :
'(' NUMBER ',' 'NUMBER' ',' 'NUMBER' ')' { int x = $2; int y = $4; int z = $6;
printf("%d,%d,%d",x,y,z);
;
Что я хотел бы сделать, так это распечатать что-то вроде drawShape(shape, x, y, z); - но я не уверен, как вернуть семантические значения из местоположения в оператор или как получить, был ли найденный токен формы кубом, пирамидой или сферой.
На данный момент оператор печати в месте срабатывает первым, поэтому мой вывод выглядит примерно так:
1,2,3Нарисовать фигуру на месте
Лучше всего просто создать несколько переменных для хранения семантических значений из местоположения и использовать их для каждого оператора? (Это кажется немного небрежным, но я не уверен, как сделать это лучше.)