類型不匹配。期待
LexBuffer<char>
但由於一個LexBuffer<byte>
類型「字符」類型「字節」期待LexBuffer <char>,但給定LexBuffer <byte>類型'char'與'byte'類型不匹配
此不匹配是在使用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 2010-04-26 14:03:00
無法調試我們無法看到的代碼。請發佈您的代碼。 – Juliet 2010-04-26 17:33:00
這是詞法分析器的定義。上下文是使用F#編寫線性程序的DSl。 – csprabala 2010-04-27 05:31:01