의 우리가이 문법을들소에서 문법에서 변수를 시작하는 방법?
start:
expressions;
expressions:
expressions expression
| expression
;
expression:
expression NAME value { float $2 = $3;}
| NAME value { float $1 = $2;}
;
value:
INT '.' INT
;
이이 문법 우리가이 입력
을 적용 가정 해 봅시다 2.0 B 3.0
이는 = 2.0 플로트 (이 같은 우리의 문법으로 해석해야한다 ; float b = 3.0;)
내 목표는 실제로 이름을 가진 일부 변수를 선언하고 생성자를 사용하여 myClass NAME (value)과 같은 작업을 수행하는 것입니다. 값은 실수입니다.
문제는 내 예제에서 값과 같은 문법적 블록의 전체 값을 얻는 방법과 입력 파일에서 각 줄마다 바뀌고 변수 이름의 선언을 만드는 방법을 모르는 것입니다. 일반 float a = $ 1;
은 이미 나에게 당신은 C++에서 변수 이름 대신에 문자열을 사용할 수 없습니다 NAME과 VALUE
플로트를 생성하는 방법은 무엇입니까? 새 유니온을 만들고 float이 될 값을위한 유형을 생성하는 것과 같습니까? – Gengetsu
@Gengetsu 두 개의 정수 중에서 부동 소수점을 만들려면 두 점을 사이에 점이있는 문자열에 붙여 넣은 다음 해당 문자열에'strtod'를 사용하면됩니다. 그것은 당신의 렉서가'int'가 아닌 INT 토큰에 대한 문자열 값을 생성한다고 가정합니다. 렉서에서'int'를 얻는다면, 그것들을 올바르게 사용할 수있는 방법이 없습니다 (당신은 소수 부분에서 0을 잃을 것입니다). 더 나은 대안은 어쨌든 렉서가 어쨌든 수레를위한 단일 토큰을 만들어내는 것일 것입니다. 나는 당신의 코멘트의 두 번째 부분을 이해하지 못합니다. – sepp2k
좋아요, 제 의견의 두 번째 부분은 INT (int)를 이미 부동이라고 말한 부동 소수점으로 변환하는 방법입니다. 그래서 지금 무엇을 해야할지 고마워요. – Gengetsu