簡體   English   中英

如何從野牛語法中初始化變量?

[英]How to initiate a variable from the Grammar in Bison?

假設我們有這種語法

start: 
expressions;
expressions:
           expressions expression 
           | expression 
           ;
expression:
          expression NAME value { float $2 = $3;}
          | NAME value  { float $1 = $2;}
          ;
value:
      INT '.' INT
      ;

對於這個語法,我們應用此輸入

a 2.0 b 3.0

這應該由我們的語法解釋如下(float a = 2.0; float b = 3.0;)

我的目的實際上是聲明一個具有名稱的變量,並使用構造函數來執行諸如myClass NAME(value)之類的操作; 價值是浮點數。

問題是我不知道如何在示例中獲得像語法值之類的語法塊的全部值,以及如何進行變量名聲明,該變量名將在輸入文件的每一行中更改,並且不會具有一些通用浮點數= $ 1;

我已經有我的flex tokeniser工作了,它將給我NAME和VALUE

在C ++中,不能使用字符串代替變量名。 您應該做的是定義一個從字符串到浮點的映射,然后執行諸如the_map[$2] = $3; 而不是float $2 = $3;

無關緊要的是,您需要在value上添加一個操作,使其生成浮點值(或讓您的詞法分析器為float生成單個標記並使用該標記)。 否則,在expression的action中使用$3它沒有適當的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM