幸运的是
-----------------------------------------
现在你可以看明白了上边的规则,问题又来了,我们怎么来处理这种语法的规则呢?
该不会要自己写一个人肉编译吧?该不会要自己写一个人肉编译吧?该不会要自己写一个人肉编译吧?
哈哈,不要担心,我们有现成的工具,它的名字叫另一种C编译器(yacc , yet another C compiler) ,而不用重新发明轮子。
yacc 可以直接读取我们上边所写的规则 ,执行我们所要作的,只是将匹配的规则规定出来一个动作就行。
比如:
如果我们遇到了expression + number 这个语法 ,我们就把两个表达式加起来就行了
遇到了number 语法,把这个数返回就行了
这两条规则,在yacc 里写出来是这样的:
expression:
number { $$ = $1 ;}
| expression ‘+’ number { $$ = $1 + $3 }
yacc 能接受的语法是:
语法 {动作}
就是说,遇到了一条能接受的语法,我们执行什么样的动作。
对于每个能接受的语法,每个语法中的符号(比如num

本文介绍如何使用lex和yacc工具构建一个简单的计算器。首先解释了yacc如何根据语法规则执行动作,然后展示了lex如何通过正则表达式识别数字和其他符号。通过示例代码,展示了计算器识别和计算表达式的过程,以及如何处理错误的语法。文章末尾提出了几个练习,引导读者进一步扩展计算器功能。
最低0.47元/天 解锁文章
704

被折叠的 条评论
为什么被折叠?



