LEX与YACC 词汇表

LEXYACC 词汇表

 

Action(动作)

LEX模式和YACC规则有关的C代码。当模式或规则与输入序列匹配时,执行动作代码。

 

Alphabet(字母表)

不同符号的集合。例如,ASCII字符集是128个不同字符的集合。在LEX规范中,字母表是计算机的本地字符集,除非使用“%T”来定义定制的字母表。在YACC语法中,字母表是语法中使用的标记和非终结符的集合。

Ambiguity(歧义)

有歧义的语法指的是具有匹配同一个输入的多条规则或规则集合的语法。在YACC语法中,有歧义的规则导致移进/归约冲突或归约/归约冲突。YACC使用的分析机制不能出来有歧义的语法,所以当创建语法分析程序时,它使用%prec声明以及它自己的内部规则来解决这个冲突。

Lex规范可以是(并且通常是)有歧义的;当两个模式匹配同一个输入时,规范中的较前面的模式取胜。

 

ASCIIAmerican Standard Code for Information Interchange 美国信息标准交换标准代码)

代表在美国字母表中找到的普通符号的128个符号的集合:包括小写和大写字母、数字和标点符号,另外还包括用于格式化和数据通信链路控制的其他字符。运行YACCLEX的大多数计算机都使用ASCII,尽管一些IBM大型机系统使用不同的称为EBCDIC256的符号代码。

 

BNFBackus-Naur Form,巴克斯-诺尔范式)

表示语法的一种方法,常用于指定程序设计语言的正式语法。YACC的输入语法式BNF的简化版本。

 

BSDBerkeley Software Distribution,伯克利软件发行中心)

伯克利的加利福尼亚大学在Seventh Edition UNIX(UNIX7)的基础上发行了一系列的操作系统版本;通常,BSD用特殊分配的版本号所指定,例如,BSD 2.10BSD 4.3

 

compiler(编译程序)

它是将某种语言的一套指令(一个程序)转换成一些其他的标识方法的程序;通常,编译程序的输出采用直接在计算机上运行本地二进制语言的形式。与“解释程序”(interpreter)进行比较。

 

Conflict(冲突)

冲突是指分析同一输入标记时,YACC语法中的两个(或多个)分析动作都是可能的。有两种类型的冲突;移进/归约和归约/归约。(参见ambiguity(歧义))

 

empty string(空字符串)

具有零个符号的特殊情况下的字符串,有时写为 ε。在C语言中,空字符串即仅仅由ASCII字符NULL组成的字符串。YACC规则可以匹配空字符串,但是LEX模式不能。

Finite automation(有限自动机)

由有限数目的指令(或转换)组成的抽象机。有限自动机在建模许多普通的“发生计算机进程”方面很有用,并且有有用的数学性质。LEX和YACC创建基于有限自动机的词法分析程序和语法分析程序。

 

Intput(输入)

由程序读取的数据流。例如,LEX扫描程序的输入是字节序列,而YACC语法分析程序的输入是标记序列。

 

Interpreter(解释程序)

读取语言(程序)中指令并对它们进行一次一条的解码和操作的程序。与“编译程序”(compiler)进行比较。

 

Language(语言)

形式上说,是基于一些字典表的定义良好的字符串集合;非形式上讲,是描述计算机能够执行的任务的一些指令的集合。

 

LALR(1)LookAhead Left recursive,向前查看左递归)

YACC使用的分析技术。其中的(1)表示向前查看限制为一个标记。

 

Left-hand side(LHS,左侧)

Yacc规则的左侧(LHS)是冒号前面的符号。在分析的过程中,当输入匹配规则的RHS序列符号时,那个序列被归的LHS符号。

Lex

产生词法分析器的程序,词法分析程序能够根据正则表达式所定义的内容匹配字符流。

 

Lexical analyzer(词法分析器)

将字符流转化为标记流的程序。LEX将单个标记以正则表达式的形式来描述,将字符流拆分成标记并决定标记的类型和数值。例如,它也许将字符流“a=17;”转换成由名字“a”、操作符”=”、数字”17”和单个字符标记“;”组成的标记流。词法分析器也成为词法分析程序(LEXER)或扫描程序。

 

Lookahead(向前查看)

由语法分析程序或扫描程序读取的尚未匹配模式或规则的输入。YACC语法分析程序向前查看单个标记,而LEX扫描程序有不限长度的向前查看。

 

Non-terminal(非终结符)

不出现在输入中的YACC语法中的符号,而是由规则定义。与“标记”(token)进行对比。

 

Parser stack(分析程序堆栈)

yacc语法分析程序中,部分匹配规则的符号存储在内部堆栈中。当语法分析程序移进时,符号被添加到堆栈中;而当它被归约时,符号从堆栈中被删除。

 

Parsing(语法分析)

取得标记流并且在某些语言中逻辑地将它们归组到语句中的过程。

Pattern(模式)

LEX词法分析程序中,词法分析程序匹配输入的正则表达式。

 

Precedence(优先级)

一些特殊的操作被执行的顺序;例如当解释数学语句时,乘法和除法被赋予了比加法和减法更高的优先级,如语句“34×5”的执行结果是23而不是35

 

Production(产生式)

参见规则(rule)。

 

Program(程序)

执行某种预定义任务的指令集合。

 

Reduce(归约)

YACC语法分析程序中,当输入匹配规则的RHS上的符号列表时,语法分析程序通过从语法分析程序堆栈中删除RHS符号并用LHS符号取代它们来简化这条规则。

 

Reduce/reduce conflict(归约/归约冲突)

yacc语法中,两个或多个规则匹配同一标记串的情况。Yacc通过归约语法中前面出现的规则来解决这个冲突。

 

Regular expression(正则表达式)

指定匹配字符串序列的模式的语言。正则表达式由标准字符(标准字符匹配输入中相同的字符)、字符类(匹配类中的任意单个字符)和其他字符(它指定部分表达式匹配输入的方式)组成。

 

Righthand sideRHS,右侧)

Yacc规则的右侧(RHS)是跟在冒号后面的符号列表。在分析过程中,当输入匹配规则的RHS符号序列时,序列被归约为LHS符号。

 

Rule(规则)

yacc中,规则是语法的抽象描述。Yacc规则也成为产生式。规则是成为LHS的单个非终结符,冒号和可能为空的成为RHS的符号集。每当输入匹配规则的RHS时,语法分析程序就归约规则。

 

Semantic meaning(语义意义)

参见“值”(value

 

shift(移进)

yacc语法分析程序将输入符号移进到分析程序堆栈上,以便符号匹配语法中的一条规则。

 

Shift/reduce conflict(移进/归约冲突)

yacc语法中,在符号完成一条规则的RHS情况下,语法分析程序是需要归约,并且如果这个符合是其他规则的RHS中的中间符号时,语法分析程序需要移进这个符号,出现移进/归档冲突是因为语法是有歧义的,或者是因为语法分析程序在决定是否规约符号完成的这条规则之前需要查看更多的标记。Yacc通过移进来解决这个冲突。

 

Specification(规范)

Lex规范是匹配输入流的模式集合。Lex将规范转换成词法分析程序。

 

Start state(起始状态)

lex规范中,模式可以用起始状态标记。

 

Start symbol(起始符号)

Yacc语法分析程序把有效输入流所归到的单个符号。LHS为起始符号的规则称为起始规则。

 

Symbol table(符号表)

包含了与输入中出现的名字有关的信息的表,因此对同一名字的所有引用都涉及到同一对象。

 

Symbol(符号)

yacc术语中,符号可以是标记或非终结符。在语法规则中,规则右侧发现的任何名字总是一个符号。

 

System V(系统V

UNIX7版(基于UNIXBSD版本)之后,AT&T又发布了UNIX的新版本,最新发布的成为系统V;较新的版本都带有版本号,所以通常指的是系统V或系统V.4

 

token(标记)

yacc术语中,标记或终结符是由词法分析程序提供给词法分析程序的符号。比较在词法分析程序中定义的“非终结符”(non-terminal)。

 

Tokenizing(标记化)

将字符流转变为标记流的过程成为标记化。词法分析程序标记化它的输出。

 

Value(值)

Yacc语法中的每个标记都有一个语法值和一个语义值;它的语义值是标记的实际数据内容。例如,某个操作的语法类型可能是INTEGER,但是它的语义值也许是3

 

YaccYet Another Compiler,另一种编译程序的编译程序)

用类似BNF的格式从规则列表中生成语法分析程序的程序。

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值