Lexing并不特定于C(在某种意义上,您将在其他编程语言中使用类似的技术).你可以用手写代码(使用有限自动机编码技术)来做到这一点.你可以使用像flex这样的词法分析器.您甚至可以在POSIX系统上使用regexprs,例如regex.h函数.
解析也是一个众所周知的领域,采用标准技术(至少对于无上下文语言,如果你想要一些效率).您可以使用递归下降解析,您可以使用bison(其示例非常接近您的作业)或ANTLR生成解析器.阅读有关LL解析和LR解析的更多信息.顺便说一句,解析技术可以用于lexing.
顺便说一下,有大量的免费软件(例如Guile,Lua,Python等脚本语言的解释器),JSON,YAML,XML ......解析器,几个编译器(例如tinycc)等......说明这些技术.通过研究源代码,您将学到很多东西.
你可能更容易有一个或两个字符的前瞻,例如首先读取整行(使用getline(3)或fgets(3),甚至可能读取readline,这会给你一个行编辑器).如果您无法读取整行,请考虑使用fgetc(3)并ungetc
在需要时使用.<ctype.h>
像isalpha这样的分类工具可能会有所帮助.
如果你关心UTF-8(原则上你应该),事情变得稍微复杂一些,因为一些Unicode字符(如€,é,...)用UTF-8表示几个字节.像libunistring这样的库应该非常有用.
归档时间: |
|
查看次数: |
53 次 |
最近记录: |