Yacc是一种语法分析器,它可以读取文本并用来将单词序列转换为便于处理的结构化的格式。
这就意味着,如果yacc在知道采取哪个动作之前,必须读取两个标记,那么它将无法解析该语法。
这里是一个简单的示例程序,只需要一页yacc代码和半页lex代码就可以编写完该程序。
一些情况下,当给定一个规范集合时,Yacc生成词法分析器会失败。
在这两篇文章的所有内容中,“lex”和“yacc”这两个名字所代表的也包括这些工具的GNU版本flex和bison。
yacc允许您通过符号名引用表达式的组成部分。
这个数据类型是一个Cunion对象,在yacc文件的第一部分使用%union声明来定义。
yacc文件的第一部分定义了解析器将要处理和生成的对象。
一般说来,我们将要通过规定的编译工具和另外的某编译器来生成能计算这个算术运算的目标程式。
Yacc提供了一个通用工具来识别程序输入的结构。
通常解决此问题的方法是定义一个容纳yacc将要处理的对象的数据类型。
例如,可以使用lex和yacc读取很多编程语言的代码。
yacc设计用来处理lex的输出,不过您也可以编写自己的代码来完成此任务。
为了深入学习lex和yacc,您最好去编写一些用来消遣的小程序。
yacc接受成组的记号,并将它们装配为高层次的结构,类似于句子。
这就是yacc要做的:yacc让您可以描述希望怎样处理记号。
我们在这里研究的工具是这样做的,流行的编译器开发工具YACC(及其变体)也是这样做的。
类似于lex文件,yacc文件也是由使用%%标志隔开的部分构成。
外部DSLs可构建一个新语法,构建时需要使用lexx和yacc或Antlr等工具。
JavaCC与YACC一样,是为加快语言解析器逻辑的开发过程而设计的。