回答
词法分析有助于简化解析,因为词位可以被视为抽象实体而不是具体字符序列。
不过,您需要的不仅仅是flex来构建您的语言:词法分析只是第一步。
您可以展示一个没有Flex简单代码的例子吗? – 2009-11-30 14:32:14
你会考虑使用一个词法分析器,因为你可以使用BNF(或EBNF)来声明性地描述你的语言(语法),然后使用一个解析器来解析用你的语言编写的程序,并将它在一个结构中在内存中,然后自由处理它。
这不是强制性的,你当然可以自己写,但这取决于语言的复杂程度以及需要花费多少时间重新发明轮子。
而且,事实上,你可以使用一种语言(BNF)来描述你的语言,而不改变词法分析器本身,使您可以多次实验,改变你的语言的语法,直到你有什么对你有用。
你可以写自己的词法分析器,是的。然而,要做到这一点*正确*就像flex做的那样,快速且高效,您必须逐个检查每个字符在整个语法中该标记位置的每个字符,直到一个(并且只有一个)被重新识别。通过大量使用goto,最有效地实现像这样的状态机。对于那些知道自己在简单的语法上做什么的人来说,这可能是好的,但通常这些事情最好留给工具。 – 2009-11-30 15:09:36
@ T.E.D。我同意。这就是为什么我说“......你需要多少时间重新发明轮子”。无论如何,我当然不鼓励有人从头开始写这样的东西。 – Petros 2009-11-30 20:07:44
无论何时您将输入字符串转换为以空格分隔的字符串和/或数字值,您都在执行词法分析。编写级联系列的else if (strcmp (..)==0) ...
语句算作词法分析。即使像sscanf和strtok这样讨厌的工具也是词法分析工具。
你想使用类似上面的弯曲,而不是一个工具有以下几个原因之一:
- 错误处理可制成好得多。
- 您可以更灵活地使用flex识别不同的事物。例如,用scanf例程很难正确解析C格式的十六进制值。 scanf几乎不得不知道十六进制值正在提交。 Lex可以为你解决这个问题。
- Lex扫描仪速度更快。如果您正在解析大量文件和/或大文件,这可能变得很重要。
- 1. 为什么在词法分析中使用缓冲?
- 2. 为什么我的词法分析器不能识别行情“”
- 3. ocaml分析器和词法分析器
- 4. 什么可用于silverlight,M编程或ANTLR的解析器/词法分析器?
- 5. 代表词法分析器
- 6. Scheme词法分析器
- 7. 词法分析器的目的是什么?
- 8. 什么是面向对象的扫描器(词法分析)?
- 9. 词法分析器的命名约定是什么?
- 10. 在翻译中,词法分析器之后是什么(通常)?
- 11. 词法分析
- 12. 词法分析器用C eroor
- 13. Antlr为什么不生成一个词法分析器java文件?
- 14. 词法分析器如何返回分析器使用的语义值?
- 15. 词法分析库
- 16. 为什么Lucene QueryParser需要分析器
- 17. 为什么使用XML解析器?
- 18. ANTLR 4词法分析器记号
- 19. 错误编译flex(词法分析器)
- 20. 找出Flex(词法分析器)yy_push_state
- 21. pygments如何猜测词法分析器?
- 22. ANTLR4 - 对于词法分析器
- 23. 如何编写Python词法分析器?
- 24. 问题移植词法分析器
- 25. 自定义C++ scintilla词法分析器
- 26. 创建列表词法分析器
- 27. 在Java中构建词法分析器
- 28. Xcode flex词法分析器未生成
- 29. Antlr - 多个词法分析器导入
- 30. C python中的词法分析器
作业问题? – 2009-11-30 14:59:12
当然不是,我没有上课。 – 2009-11-30 15:11:28
+1 Por ser brasileiro como eu **;)** – 2009-11-30 15:12:07