2011-01-24 18 views
2

在Dragonbook行使3.3.1学生应该“编程语言X的字母表”的意思真的是字符或单词?

咨询语言参考手册 确定(i)该字符集 形成输入拼音 (不包括那些可能只在文字出现 字符串或注释[...] 每个下列语言: [...]

这是没有真正意义,我真的很喜欢形容所有a的人物,b/,即使它是编译器的练习。编程语言的字母不是一组可能的单词,如{id, int, float, string, if, for, ... }

如果你认为这个词的基本思想真的是“字符”,那么在C中是一个还是三个字符(或两者)???/

回答

5

语言的字母表是一组字符而不是单词。

不是一种编程语言 的字母一组可能的话, 像{ID,整数,浮点,字符串,如果为, ...}?

不,字母表是用于形成单词的字符集。当指定语言时,必须给出字母表,否则无法区分有效令牌和无效令牌。

更新

您与 “令牌” 混淆术语 “字”。一个单词不是某种语言或程序的一部分。一个词是字母表中有限的字符串。它与像“int”或“while”这样的语言结构无关。例如,每个C程序都是一个单词,因为它是字母表中有限的字符串。所有这些程序(单词)的集合构成了C编程语言。像“void”或“int”这样的标记完全是另一回事。

回顾一下,首先定义你想要使用的一组字符。这被称为字母表。这些字符的有限字符串形成单词。语言是所有可能单词的一部分。要定义一种语言,可以定义哪些词属于该语言。例如,使用正则表达式或上下文无关文法。

维基百科在形式语言上有很好的一页。
http://en.wikipedia.org/wiki/Formal_language

+0

随着你的答案和这本书,我想我明白了。你只要看看Lexer会做的语言。对他来说,没有任何文字,只有一串他可能接受和形成的文字。 – erikbwork 2011-01-24 02:22:31

0

的混乱来自理论限定字母表从其中形成在一个语言字符串中的符号集合。请注意,编程语言的语法使用令牌而不是字符终端符号

传统上,从语言理论的角度来看,编程语言涉及两种语言定义:1)以字母作为字母表和令牌作为有效字符串的语言定义。 2)具有令牌作为字母表和程序作为有效字符串的标记。这就是为什么编程语言通常分为两个部分,一个是词法分析器和一个语法分析器。

使用两个定义来解析编程语言并不是绝对必要的。可以使用单个语法来指定使用字符作为输入字母表的编程语言。这只是让字符到令牌部分更容易用正则表达式来指定,而令牌到程序部分则使用语法。

ANTLR这样的现代编译器编译器使用了包含正则表达式表达方便性的语法规范语言,所以可以用单个语法完成字符到程序的定义。尽管如此,分离词法句法仍然是解析编程语言的最便捷方法,即使使用这些工具。

最后一刻例如:想象一下,对于一个IF-THEN-ELSE端的文法产生必须处理的字符水平:

  • 空白。
  • 编程语言字符串中的关键字:“然后,结束。”
  • 包含关键字的变量名: 'TIFF',
  • ...

这是可以做到,但它是非常复杂的。

相关问题