OCaml 컴파일러가 제공하는 경고를 수정하는 데 문제가 있습니다.OCaml에서 철저한 일치 경고를 표시하지 않습니다.
기본적으로 나는 Bool
, Int
및 Float
으로 구성 될 수있는 표현식을 구문 분석합니다.
나는 자신의 유형으로 선언 된 모든 기호를 추적하는 심볼 테이블이 있습니다 int
모든 변수의 배열에서 나중에 사용되는 인덱스입니다
type ast_type = Bool | Int | Float
and variables = (string, int*ast_type) Hashtbl.t;
.
type value =
| BOOL of bool
| INT of int
| FLOAT of float
| UNSET
and var_values = value array
나는 내가 너무 무엇을 부울 식 내부 변수 참조의 동작을 정의하기 위해 노력하고있어
-
입니다 :
나는 변수의 값을 나타내는 구체적인 유형은 다음이 변수 변수 BOOL
| GVar s ->
begin
try
let (i,t) = Hashtbl.find variables s in
if (t != Bool) then
raise (SemanticException (BoolExpected,s))
else
(fun s -> let BOOL v = Array.get var_values i in v)
with
Not_found -> raise (SemanticException (VarUndefined,s))
end
문제는 내 검사 var_values
에서 가져온 요소가이 제약 ISN '유형 BOOL of bool
으로하지만 당연히 될 것이라고 확신이다 :
내가 (s
은 변수의 이름입니다)이 코드가이 작업을 수행하는 컴파일러가 나를 경고하는 t :
경고 P :이 패턴 일치는 완전한 것이 아닙니다. 나는 문제의이 종류를 해결하기 위해 가정하고 어떻게
(| | INT _ UNSET FLOAT _) : 여기 는 일치하지 않는 값의 예입니다? 미리 감사드립니다.
'var_values = value array' 형식을 선언하는 것은 유용 할뿐입니다.이 형식을 추상화하고 그 이름 만 모듈 외부에서 볼 수있게하면 유용합니다. 이 가능성을 제외하고는 오류 메시지를 읽기 쉽게 만들 수있는 쓸모없는 유형 별칭입니다. –