Как написать файл 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.