나는 어디에서나 예제를 찾으려고 노력했지만 헛된 것이었다.들소에서의 의미 론적 유형 검사 분석
기본 Ruby 인터프리터를 작성하려고합니다. 이를 위해 저는 토큰 인식 문장과 문법 파일을 포함하는 플렉스 어휘 파일을 작성했습니다.
내 문법에 의미 유형 검사가 포함되기를 바랍니다.
내 문법 파일은 예를 들어, 포함
arg : arg '+' arg
이 정수와 수레에 유효한 규칙해야한다.
내가 읽은 바에 따르면, 그래서 같이 같은 인수와 같은 비 터미널 유형을 지정할 수 있습니다 : "INTVAL는"유형 조합에 있고 INT의 C 유형에 해당
%type <intval> arg
.
그러나 이것은 정수에만 적용됩니다. 예를 들어, float에 유효한 규칙을 만드는 방법을 모르겠습니다. 내가 좋아하는, 두 개의 서로 다른 규칙의 int 하나와 수레 하나를하는 것에 대한 생각 :
argint : argint '+' argint
argfloat : argfloat '+' argfloat
하지만이 극악 가지고 저를 필요로하기 때문에 나는 그렇게 훨씬, 훨씬 더 나은 방법이 확신 float와 int 사이에 추가를 허용하는 규칙.
내가 발견 한 모든 예제에는 단 하나의 유형 만 있습니다 (보통 계산기와 같은 예제에서는 정수).
덧셈과 같은 규칙에 ints와 float을 인자로 사용할 수 있도록 지정하려면 어떻게해야합니까?
대단히 감사합니다.
당신은 % type의 목적을 오해했습니다. YYUNION에서 사용할 문법 터미널과 터미널이 아닌 유형을 제어하기 때문에 $$, $ 1 등의 형식 변환을 작성할 필요가 없습니다. 의미 유형을 제어 할 수 없도록합니다. 당신이 파싱하고있는 프로그램에서. – EJP