Как написать файл lex для ввода, как "{\"a\":1,\"b\":2}"

Я хочу реализовать синтаксический анализатор json, но возникли проблемы с объектом синтаксического анализа, например "{\"a\":1,\"b\":2}", в настоящее время парсер выводит что-то вроде этого

'(json
  (object
   "{"
   (kvpair
    "\"a\":1,\"b\""
    ":"
    (json (number "2")))
   "}"))

но то, что я на самом деле хочу,

'(json
    (object
     "{"
     (kvpair "\"a\"" ":" (json (number "1")))
     ","
     (kvpair "\"b\"" ":" (json (number "2")))
     "}"))

Я использую #lang ragg и parser-tools/lex, так как я могу написать правила lex, чтобы получить правильный вывод. исходный код

1 ответ

Решение

Изменить правило для string-literal в lex.rkt чтобы:

[string-literal
   (:: #\" (:* char-literal1) #\")]

Обратите внимание на добавленный 1.

Другие вопросы по тегам