一个朝着
牛A和牛C之间努力的程序猿的博客

纯C语言词法分析器

纯C词法分析器,可以试下多种语言的词法分析功能。
孟关伦只要改一下keywd表就行了。主要是一个自动机。可以实现跨平台,gcc vc均有测试。大家可以自己接语法树生成处理。暴露出一些问题,下划线不能连成标识符。

红线运算符
蓝线关键字
属于Table。c
运算符结构包含运算符优先级等均在tree。h有定义
结构比较清晰,不是太难懂
【需要语法树构建请添加到snana。c】
异常包含于error.c

孟关伦简单说一下原理:
一串字符流送入int SplitScanner(wchar_t* exp)函数
从头开始逐个扫描。各个记号由自动机的状态进行归并。
归并完成后,调用int DiscardToken(void);函数进行进一步处理
比如DiscardToken负责2 8 1016 60进制转换,
浮点数转为有理数送入词素流

自动机状态由InitTokenSwitchFlags函数负责转换并判断
如有异常交给int ReportError(ErrNumber id, int ln, int col)
从reporterr的定义中可以看出:ln col变量保存发生错误的行列信息

注意lxana有一句注释“//Add launcher?”请在此处添加语法分析引擎。。。

mainx是启动器,根据自己的实际情况:
是构建interpreter还是compiler?
平台位于win 是console app/win32app
平台位于osx 根据情况修改之
【【孟关伦提示大家:特别注意以一下】】
该lexical analyzer支持宽字符(如果你想制作易语言),这个lxana是实现卡西欧自然书写的第一步!远离自己推敲!

赞(0)
未经允许不得转载:孟关伦博客 » 纯C语言词法分析器
标签: