我一直在寻找一种不符合一般 Flex/Bison 范式的语言。根据语义上下文,它具有完全不同的标记规则。例如:
main() {
batchblock
{
echo Hello World!
set batchvar=Something
echo %batchvar%
}
}
Bison 显然支持识别这些类型的语法,但它需要“Lexical Tie Ins”才能有效支持它们。它提供了一个用于执行此操作的接口(interface)——但我对如何根据上下文提供不同的 flex 正则表达式感到困惑——如果这可能的话。
提前致谢:)
最佳答案
I'm confused as to how exactly I can supply different flex regexes depending on the context
Flex 有一个状态机制,您可以通过它在不同的正则表达式集之间切换。语法是
%x name_of_state
在文件的顶部(在 %}
之后)和在您的匹配规则中(在第一个 %%
之后)
<name_of_state> *regex goes here*
那么这个正则表达式只有在那个状态下才会被匹配。还有一个全局状态 <*>
可用于匹配任何状态下的任何内容。
改变状态的方法不止一种。例如,yy_pop_state
和 yy_push_state
如果你想保留一堆状态。或者你可以使用 BEGIN(name_of_state)
.要返回初始状态,请使用 BEGIN(INITIAL)
.
关于c - Flex 和 Bison 的词汇搭配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589165/