2014-06-11 5 views
1

나는 간단한 Basic-like 언어를 쓰고있다. 어떤 이유로 나는 'call my_subroutine'을 사용하여 서브 루틴을 호출하는 대신 'call'키워드를 피하고 싶습니다. E.g: a=8:do_something:b=c+d매개 변수 자체 명령으로

나는 서브 루틴을 선언 할 수있는 잘 작동하는 방법을 가지고있다. Flex는 또한 선언 된 서브 루틴이 사용자 문자열에 나타날 때 인식합니다. 그러나 나는 들소 선언에 어려움이있다. 다음과 같이 내가 할 :

%token CALLSUB ... ... ... stmt: ... CALLSUB { $$ = opr(CALLSUB, 2, NULL, NULL); } //note: to be referred later ...

내 플렉스

yylval.iValue = ... //the proper address return CALLSUB;

같은 서브 루틴과 수익을 인식하고 지금은 괜찮아 보이지만,에가 있기 때문에 매개 변수가 반환되지 않습니다 최대 Bison에서 선언 된 매개 변수가 없습니다 (위의 참고 참조).

하나가 대신 토큰의 변수로 선언 할 수 있다고 생각 할 수있다 언뜻

하지만 예상치 못한 공포를 주도 할 ...

해결책은 무엇입니까?

답변

2

"매개 변수"란 무엇을 의미합니까? "CALLSUB 토큰의 의미 론적 가치"에서처럼 "의미 적 가치"를 의미합니까?

그렇다면, 유형 (%token <iValue> CALLSUB)가하고 $1하게 될 bison 행동에 그 값을 사용 CALLSUB을 선언합니다.

+0

그게 전부 야! 고마워요! – Steve

관련 문제