Tôi đang cố gắng phân tích các nhận xét kiểu lisp từ ngôn ngữ biểu thức s bằng FParsec. Tôi đã nhận được một chút trợ giúp với việc phân tích các nhận xét một dòng trong chuỗi trước đó - How to convert an FParsec parser to parse whitespaceCách phân tích nhận xét bằng FParsec
Trong khi điều đó đã được giải quyết, tôi vẫn cần phải phân tích các nhận xét đa dòng. Đây là mã hiện tại -
/// Read whitespace character as a string.
let spaceAsStr = anyOf whitespaceChars |>> fun chr -> string chr
/// Read a line comment.
let lineComment = pchar lineCommentChar >>. restOfLine true
/// Read a multiline comment.
/// TODO: make multiline comments nest.
let multilineComment =
between
(pstring openMultilineCommentStr)
(pstring closeMultilineCommentStr)
(charsTillString closeMultilineCommentStr true System.Int32.MaxValue)
/// Read whitespace text.
let whitespace =
lineComment <|>
multilineComment <|>
spaceAsStr
/// Skip any white space characters.
let skipWhitespace = skipMany whitespace
/// Skip at least one white space character.
let skipWhitespace1 = skipMany1 whitespace
Thật không may, phân tích cú pháp phân biệt nhiều người không bao giờ thành công. Vì đây là một combinator, tôi không thể đặt breakpoint hoặc phân tích lý do tại sao nó sẽ không hoạt động.
Bất kỳ ý tưởng nào tại sao nó không hoạt động?
Ah, tuyệt vời! Tôi đã bị phân tâm bởi nghĩ rằng nó sẽ là một số vấn đề phân tích sâu bên dưới, nhưng hóa ra đó là một boolean mà tôi đã chỉ định một cách vô tư! Cảm ơn bạn! –
Xem cập nhật. – Gustavo
Thánh-moly trông khó khăn! Tôi rất vui vì tôi đã hỏi! Tôi sẽ cố gắng để grok rằng cho đến khi tôi có thể nhận được nó :) Cảm ơn một lần nữa! –