No coincide. Esperando un
LexBuffer<char>
pero dado unLexBuffer<byte>
El tipo char 'no coincide con el tipo 'bytes'Esperando un LexBuffer <char> pero dado un LexBuffer <byte> El tipo 'char' no coincide con el tipo 'byte'
Este es el mensaje de error que estoy recibiendo durante el uso de fslex. Intenté comprobar manualmente cada aparición de lexbuf y su tipo. Es LexBuffer<char>
en todas partes. Pero aún el compilador me está dando el error anterior. ¿Puede decirme por qué ocurre este error y cómo resolverlo?
{
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 }
Bienvenido a SO. Tenga en cuenta que los corchetes angulares en el texto de su pregunta deben escaparse en las comillas inversas para que se muestren correctamente. He hecho esta edición por usted. – AakashM
No se puede depurar el código que no podemos ver. Por favor publique su código. – Juliet
Esta es la definición de lexer. El contexto es escribir un DSl para un programa lineal usando F #. – csprabala