我正在用C++构建一个玩具JSON解析器,仅用于学习体验。
在构建词法分析器时,我遇到了一个难题:词法分析器应该贪婪吗?如果是这样,在哪里定义?我在JSON或ECMA-404中都找不到任何指令。
特别是,在尝试标记以下内容(无效数字)时:
0.x123
我的词法分析器应尝试将其解析为无效数字“0.x123”(贪婪行为)还是无效数字“0.x”后跟有效数字“123”(但最终将其解析为无效的 token 序列) ?
另外,在标记字符串时,应由词法分析程序负责检查字符串是否有效(例如,是否仅在反斜杠后面加上允许的转义字符),还是应该在其他语义分析步骤中检查此约束?我想这更像是一种体系结构偏好,但是我对您的意见很好奇。
最佳答案
无效无效。如果您无法解析它,请尽早保释并提出错误。
这里不必贪婪,因为您将浪费时间来处理对情况零影响的数据。
关于c++ - JSON lexer应该贪婪吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58632884/