Я пишу 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Драфа в местоположении
Isлучше всего просто создать некоторые переменные для хранения семантических значений из местоположения и использовать их для каждого оператора?(Это кажется немного неаккуратным, но я не уверен, как это сделать лучше.)