Я написал простую C-подобную грамматику в Bison, и у меня есть странная проблема.Bison: Получение/сохранение значений nonterminals
В следующем правиле:
declaration: "identifier" length init_values
{symbolTable.add($3,$4,$5);}
Я хочу, чтобы получить Int значения length
и init_values
, которые нетерминалы, хранить их в таблице символов. identifier
- это токен, и его буквальное значение сохраняется правильно. Тем не менее, я получаю некоторые целые значения, такие как 66236273 для других символов.
нетерминальных правил:
length: "number" {};
init_values: "number" {};
Я попытался с помощью токенов непосредственно вместо нетерминалов, но синтаксический анализатор не может различать number
и length
и так далее. Он просто проанализировал все целые числа как number
, что и привело к его сбою.
Кто-нибудь знает, как получить фактические значения этих данных? то есть числовые значения, которые я смог найти в последних правилах, но почему-то они теряются, когда парсер переходит к первому правилу.
Почему вы используете $ 3, $ 4, $ 5? В правой части этого правила есть только три символа, поэтому они должны быть. $ 1, $ 2, $ 3. – rici