유형이 일치하지 않습니다. 유형 '바이트'LexBuffer가 필요하지만 LexBuffer가 주어진 경우 <byte> 'char'유형이 'byte'유형과 일치하지 않습니다.
이 일치하지 않는 LexBuffer<byte>
유형 '문자'주어진 LexBuffer<char>
하지만를 기대하는 것은 fslex 사용하는 동안 나는 점점 오전 오류 메시지입니다. 나는 lexbuf와 그 타입의 매번 발생하는 것을 수동으로 체크 해보려고 노력했다. 어디서나 LexBuffer<char>
입니다. 하지만 여전히 컴파일러에서 위의 오류를 제공하고 있습니다. 이 오류가 발생한 이유와 오류를 해결하는 방법을 알려주십시오.
{
open System
open Microsoft.FSharp.Text.Lexing
open Microsoft.FSharp.Text.Parsing
let lexeme (lexbuf : LexBuffer<char>) = new System.String(lexbuf.Lexeme)
let newline (lexbuf:LexBuffer<char>) = lexbuf.EndPos <- lexbuf.EndPos.NextLine
let unexpected_char (lexbuf:LexBuffer<char>) = failwith ("Unexpected character '"+(lexeme lexbuf)+"'")
}
let char = ['a'-'z' 'A'-'Z']
let digit = ['0'-'9']
let float = '-'?digit+ '.' digit+
let ident = char+ (char | digit)*
let whitespace = [' ' '\t']
let newline = ('\n' | '\r' '\n')
rule tokenize = parse
| "maximize" { MAXIMIZE }
| "minimize" { MINIMIZE }
| "where" { WHERE }
| '+' { PLUS }
| '-' { MINUS }
| '*' { MULTIPLY }
| '=' { EQUALS }
| '>' { STRICTGREATERTHAN }
| '<' { STRICTLESSTHAN }
| ">=" { GREATERTHANEQUALS }
| "<=" { LESSTHANEQUALS }
| '[' { LSQUARE }
| ']' { RSQUARE }
| whitespace { tokenize lexbuf }
| newline { newline lexbuf; tokenize lexbuf }
| ident { ID (lexeme lexbuf) }
| float { FLOAT (Double.Parse(lexeme lexbuf)) }
| ';' { SEMICOLON }
| eof { EOF }
| _ { unexpected_char lexbuf }
에 오신 것을 환영합니다을 생성하는 정의와 관련된해야 렉서에서 사용되는 lexbuf의 유형 인 반면, 전문가들은 그 이유에 더 많은 통찰력을 던질 수 있습니다. 질문 텍스트의 꺾쇠 괄호는 올바르게 표시 되려면 역 따옴표로 이스케이프 처리해야합니다.이 편집 작업을 완료했습니다. – AakashM
볼 수없는 코드를 디버그 할 수 없습니다. 코드를 게시하십시오. – Juliet
이것은 렉서 정의입니다. 컨텍스트는 F #을 사용하여 선형 프로그램 용 DSl을 작성하는 것입니다. – csprabala