Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是flex';s生成c++;解析器稳定吗?_C++_Flex Lexer_Lexer - Fatal编程技术网

C++ 是flex';s生成c++;解析器稳定吗?

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/解析器方法干净地处理。问题是最后一个标记(>),词法分析器(不知道语法)会将其视为

我都, 我在阅读,它说用Flex生成C++ Lex语言是一个错误的实验特性。

这本书在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和 >主< /代码>。我建议大家把它看作是C++的Flex的替代品。好吧,我没有解释清楚。我不需要为C++创建一个词汇表。我需要创建一个用C++编写的Listor。Flex可以用C或C++中的一个选项创建代码,选项> C++选项> C++ >代码>但是书中说这个特性是错误的。好吧,信息是:不要使用flex。你不需要lexer。只需使用解析器解析所有词汇标记。无论如何,这更自然。