주메뉴 바로가기 본문 바로가기 하단 바로가기

고객지원

기술문의

OPL Studio 관련

  • 김미이
  • 2007.09.19
  • 조회수 1,924
device를 device03과 device_other의 합집합으로 정의하고 싶은데 어떻게 해야하는지 모르겠습니다
에러가 뜨는데 어떻게 해야하나요??
관련 파일을 첨부하여 올렸습니다.
부탁드릴게요~~ 다운로드아이콘basic.zip

댓글 1

  • 이준호2007-09-19
    첨부하신 소스 내에서 사용하신 구문은 다음과 같습니다.

    enum device03=...;
    enum device_other=...;

    enum device = {t | t in (device03 union device_other)};

    위와 같은 형식으로 된 것으로 보아, 짐작하기로는 device03과 device_other의 합집합을 만들어 이용하시려고 한 듯 하고, 데이터를 이어붙여도 상관없는데 굳이 합집합의 개념을 이용하시려고 하셨다면, 아마도 중복을 허용하지 않겠다는 의미였던 것 같은데요.

    결론부터 말씀드려서, OPL3.7의 union keyword 사용 방법은 set 형식의 합집합에만 이용될 수 있는 것입니다.

    {int} s1 = {1,2,3};
    {int} s2 = {1,4,5};
    {int} u = s1 union s2;

    위와 같은 형태로만 가능하고요, 스트링의 enumeration 형태인 enum keyword에는 사용가능한 예약어가 아닙니다. 따라서 적절한 API 사용 방법이 아니라고 할 수 있으며 다음과 같은 컴파일 에러가 발생합니다.

    .\..\..basic\투입량D.mod(10) : syntax error: got token: |
    expecting token in { , } }

    따라서, 현재 문제의 데이터 구조를 바꾸지 않고 합집합의 개념을 관철해서 실험하시고 싶으시다면, 데이터인 device03과 device_other에 각각 숫자(양수, 순차적 증가)로 된 인덱스를 따로 만들어서, 그 인덱스를 enum이 아닌 Integer Set의 형태로 이용하셔야 할 듯 합니다.

    또는, 근본적인 데이터 전처리를 통해 device03과 device_other 의 합집합인 device 합집합 데이터를 미리 만들고, device만을 enum type으로 읽어들이는 프로그래밍을 하시는 것도 좋을 것 같습니다.



    아이콘삭제

댓글 입력