如何使用 Flex 仅扫描上下文中的令牌?
我想使用 Flex & 创建模板引擎的解析器。野牛。问题是我只想解析 {{..}} 和 ${..} 中的表达式。
模板可以是带有嵌入标记的任意文本,代码如下:
</table:table-row>
{{$(/report/row.xml).embed()}}
{{$(//Accreditation/AccreditationDocument/Report).each(fragment(row) """
<table:row>
<table:table-cell office:value-type="string" office:string-value="${row["name"]}" />
</table:row>
""")}}
<table:table-row table:number-rows-repeated="1048574" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
</table:table>
I want to create a parser of template engine using Flex & Bison. The thing is that I would like to parse only expressions within {{..}} and ${..}.
The template can be any arbitrary text with embedded tokens with code like this:
</table:table-row>
{{$(/report/row.xml).embed()}}
{{$(//Accreditation/AccreditationDocument/Report).each(fragment(row) """
<table:row>
<table:table-cell office:value-type="string" office:string-value="${row["name"]}" />
</table:row>
""")}}
<table:table-row table:number-rows-repeated="1048574" table:style-name="ro1">
<table:table-cell table:number-columns-repeated="16384"/>
</table:table-row>
</table:table>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我自己找到了解决方案。 Flex 有一个名为启动条件的功能。
下面是
lexer.l
代码,它仅从 {{ }} 返回令牌。其他文本作为 GENERAL_BODY 返回。I have found the solution myself. Flex has a feature called Start Conditions.
Below is the
lexer.l
code which returns tokens only from {{ }}. Other text is returned as GENERAL_BODY.