ragel - 使用 Ragel 从 ES6 模板文字中提取标记
问题描述
JavaScript 包含以下语法:
`hello ${name}`
我想知道 Ragel 机器如何拆分上面的语法。在我看来,右花括号的类型取决于解析状态。例如,在下面的代码中,大括号是字符串标记的一部分,因为${
标记不存在:
`hello name}`
最后,当您考虑在变量表达式本身中也可以找到正确的卷曲时,它变得更加棘手,即:
`hello ${() => { return name }()}`
Ragel 如何实现类似的上下文相关语法?
解决方案
`` 里面的语法通常不是你的词法分析器可以处理的。最好将它作为一系列文字文本和/或标记发送到您的解析器。因此,您将发送“`”作为开头,“hello”作为一些文字文本,然后是标记“(”,“)”等。要知道何时停止并返回文字文本,您需要来自解析器的一些反馈到您的扫描仪,或在您需要平衡括号的扫描仪内部。
注意我从来没有真正为javascript制作过解析器,只是按照你上面提供的内容进行。
推荐阅读
- python - 初学者[python]如何获取子元素的属性及其子元素的文本?
- css - 如何使用 CSS 选择器在 Bootstrap 4 中定位移动网格类 col-1,2,3, ..........12?
- java - 在节省员工时间时使用 orElseThrow 方法抛出 ConstraintViolationException
- reactjs - 使用 React hooks 重新选择 redux
- angular - 数据绑定不能跨角度的不同模块发生吗?
- ibm-information-server - 我可以在 IBM Information Analyzer 中按行和列拆分分析作业吗?
- oracle-apex - oracle sql中是否有一个函数可以从列中定义一周的开始日期和结束日期
- c# - C# - 手动覆盖配置
- python - 如何从 tkinter 笔记本中触发选项卡更改功能?
- c - 为什么我的总和值比它应该的值低 1?