C++ 是flex';s生成c++;解析器稳定吗?
我都, 我在阅读,它说用Flex生成C++ Lex语言是一个错误的实验特性。C++ 是flex';s生成c++;解析器稳定吗?,c++,flex-lexer,lexer,C++,Flex Lexer,Lexer,我都, 我在阅读,它说用Flex生成C++ Lex语言是一个错误的实验特性。 这本书在2009出版,所以我想知道这个问题在过去10年中是否被固定了。 < P>不能使用分裂的Listar(= ToKeNeisher)和解析器用于C++,因为允许嵌套模板括号: std::map<int,std::map<int,int>> std::map 这是允许的,因为C++11不能用拆分lexter/解析器方法干净地处理。问题是最后一个标记(>),词法分析器(不知道语法)会将其视为
这本书在2009出版,所以我想知道这个问题在过去10年中是否被固定了。
< P>不能使用分裂的Listar(= ToKeNeisher)和解析器用于C++,因为允许嵌套模板括号:std::map<int,std::map<int,int>>
std::map
这是允许的,因为C++11不能用拆分lexter/解析器方法干净地处理。问题是最后一个标记(>
),词法分析器(不知道语法)会将其视为右移运算符。在语法上修复这一点几乎是不可能的
使用不区分字符和标记的解析方法可以解决此问题。这意味着不使用flex可以解决这个问题(以及其他许多问题)
请注意,flex的发明主要是为了克服bison/yacc解析器的强大局限性,后者只能在先行一步的情况下解析LALR1语言。20年来,这种方法已经过时了
不要使用flex/bison/yacc。使用递归下降分析器PEG(解析表达式语法)解析器,例如PEGTL().< /P>,您可以询问图书作者……Flex此时是否已经死亡?Flex C++(<代码> Flex + < /代码>)有各种问题。在C++模式中,甚至有些Flex选项甚至不支持,例如<代码> -FAST和