Programming languages &引用;编程语言X的字母表;真的是指文字吗?

Programming languages &引用;编程语言X的字母表;真的是指文字吗?,programming-languages,Programming Languages,在龙书练习3.3.1中,学生应 查阅语言参考手册 确定(i)字符集 构成输入字母表的 (不包括那些只可能出现的 在字符串或注释中[…] 对于以下每种语言: [……] 对我来说,描述一种语言的所有字符,如a,b,/,是没有实际意义的,即使这是编译器的练习。编程语言的字母表不是一组可能的词吗,比如{id,int,float,string,if,for,… 如果你认为它在单词的基本思想中是“字符”,是C(三)字符(或两者)中的“代码>?/< /代码>?< p>语言的字母表是字符集,而不是单词。 这不是

在龙书练习3.3.1中,学生应

查阅语言参考手册 确定(i)字符集 构成输入字母表的 (不包括那些只可能出现的 在字符串或注释中[…] 对于以下每种语言: [……]

对我来说,描述一种语言的所有字符,如
a
b
/
,是没有实际意义的,即使这是编译器的练习。编程语言的字母表不是一组可能的词吗,比如
{id,int,float,string,if,for,…


如果你认为它在单词的基本思想中是“字符”,是C(三)字符(或两者)中的“代码>?/< /代码>?

< p>语言的字母表是字符集,而不是单词。

这不是一个程序的字母表吗 语言是一组可能的词, 比如{id,int,float,string,if,for, 什么

否,字母表是用于构成单词的字符集。指定语言时,必须提供字母表,否则无法区分有效标记和无效标记

更新

你把“单词”和“记号”混淆了。单词不是语言或程序的一部分。单词是字母表中的有限字符串。它与“int”或“while”之类的语言结构无关例如,每个C程序都是一个单词,因为它是字母表中的有限字符串。所有这些程序(单词)的集合构成了C编程语言。像“void”或“int”这样的标记是完全不同的

总而言之,首先定义要使用的字符集。这称为字母表。这些字符的有限字符串构成单词。语言是所有可能单词的子集。要定义语言,请定义属于该语言的单词。例如,使用正则表达式或上下文无关语法

维基百科在正式语言方面有一个很好的页面。

混淆源于将字母表定义为构成语言字符串的一组符号的理论。请注意,编程语言的语法使用符号,而不是字符作为终端符号

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

严格来说,解析一种编程语言并不需要这两个定义。可以使用单个语法指定使用字符作为输入字母的编程语言。只是用正则表达式更容易指定标记部分的字符,用语法更容易指定程序部分的标记

现代编译器喜欢使用语法规范语言,这些语言结合了正则表达式的表达便利性,因此字符到程序的定义可以用单个语法完成。尽管如此,将词汇和语法分离仍然是解析编程语言最方便的方法,即使使用了这样的工具

最后一分钟示例:假设if-then-else端的语法产品必须在字符级别处理:

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

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

有了你的答案和这本书,我想我明白了。你只需要像词汇量分析器一样看待语言。对他来说,没有单词,只有一串他可能接受或不接受的字符。@erikb,不,这也不太正确。语言是字母表上所有可能的有限字符串的子集。查看我的更新。