Как мне разрешить постфиксные символы на литерале? - PullRequest
0 голосов
/ 26 июля 2010

Используя Bison / Flex, я хочу сделать это действительным

a = 9u

Я написал правило, разрешающее использовать 'u' после литералов, но понимаю, что flex не берет его, потому что буквы возвращают VAR вместо значения ascii.

Как разрешить использование символа постфикса в литерале? Я думаю написать это в правиле лекса, но я не знаю, случится ли неприятный сюрприз. Где лучшее место для этого?

1 Ответ

1 голос
/ 26 июля 2010

Я предполагаю, что токен для числа (то, что вы называете литералом) называется LITERAL, и что имена переменных, следующие сразу за литералами, не являются нормальной конструкцией (в алгебраических языках это обычно имеет место, если вы хотите, чтобы 9 foo означало 9 * foo).

Вам нужно написать правило бизона, чтобы проанализировать последовательность LITERAL VAR и вернуть число (возможно, другой токен, кроме LITERAL, если только вам не нужно рекурсивное правило, например, 9u u). Код этого правила должен проверять, что VAR равен u (или другой допустимый постфикс), и возвращать ошибку, если обнаружится что-то неожиданное.

Я использовал подобные последовательности для разбора единиц (например, g = 9.81 m/(s^2);).

Если вы хотите потребовать, чтобы u немедленно следовал за литералом, а в результате был бы токен LITERAL, то вам придется изменить правило lex, предполагая, что пробел без кавычек не передается синтаксический анализатор.

...