Я пытаюсь пропустить любые пробелы или комментарии при анализе языка программирования.
Есть два типа комментариев, которые я хочу пропустить:
- Комментарий к строке:
;; skip rest of line
- Комментарий блока:
(; skip anything between ;)
Пример кода для синтаксического анализа с комментариями и пробелами:
(type (; block comment ;) (func))
(import "env" "g" (global $g (mut i32)))
(func (type 0) ;; line comment
i32.const 100
global.set $g)
(export "f" (func 0))
Я пробовал несколько подходов, но парсер всегда где-то ломается. Моя идея такая:
let comment : Parser<unit, Ctx> =
let lineComment = skipString ";;" >>. skipRestOfLine true
let blockComment = between (skipString "(;") (skipString ";)") (skipMany anyChar)
spaces >>. lineComment <|> blockComment
let wsOrComment = attempt comment <|> spaces
Я бы хотел, чтобы комментарии полностью игнорировались, как и пробелы. Есть идеи, как это сделать sh? (Это мой первый проект с FParse c)