在这本书的练习3.3.1中,学生应该
请参阅语言参考手册,以确定(i)构成输入字母表的字符集(不包括可能只出现在字符串或注释中的字符)。下列每一种语文:
对我来说,描述语言的所有字符(如a、b、/ )都是毫无意义的,即使这是编译器的练习。编程语言的字母表不是一组可能的单词吗,比如{id, int, float, string, if, for, ... }
如果你真的认为这个词的基本意思是“字符”,那么??/在C中是一个字符还是三个字符(或者两者都是)?
发布于 2011-01-24 01:39:43
语言的字母表是一组字符,而不是单词。
编程语言的字母表不是一组可能的单词吗,如{id,int,float,string,if,for,. }?
不,字母表是用来形成单词的一组字符。指定语言时,必须给出字母表,否则无法区分有效令牌和无效令牌。
更新
你把“单词”和“记号”混淆了。单词不是语言或程序的一部分。单词是字母表中有限的字符串。它与"int“或"while”这样的语言结构无关。例如,每个C程序都是一个单词,因为它是字母表中的有限字符串。所有这些程序(单词)的集合构成C编程语言。像"void“或"int”这样的标记是完全不同的。
回顾一下,首先定义要使用的一些字符集。这叫做字母表。这些字符的有限字符串构成单词。语言是所有可能单词的子集。要定义一种语言,您可以定义哪些词属于该语言。例如,使用正则表达式或上下文无关语法。
维基百科在正式语言方面有一个很好的页面。
发布于 2011-01-24 14:51:52
混乱来自于理论,将字母表定义为一种语言中字符串形成的符号集合。注意,编程语言的语法使用标记,而不是字符作为终端符号。
传统上,从语言理论的角度来看,编程语言涉及两种语言定义: 1)以字符为字母表,以符号为有效字符串的语言定义;2)以符号作为字母表,程序作为有效字符串的字符串。这就是为什么编程语言通常由两个部分指定,一个词法分析器和一个句法分析器。
严格来说,没有必要有这两个定义来解析一种编程语言。可以使用单个语法来指定使用字符作为输入字母表的编程语言。只是字符到标记部分使用正则表达式更容易指定,而标记到程序部分则更容易使用语法指定。
像反这样的现代编译器使用语法规范语言,这些语言结合了正则表达式的表达方便,所以字符到程序的定义可以用一个语法来完成。然而,将词法与句法分离仍然是解析编程语言的最方便的方法,即使使用此类工具也是如此。
最后一分钟的例子:想象一下,如果-然后-否则-结束的语法生成必须在字符级别处理:
这是可以做到的,但这将是极其复杂的。
https://stackoverflow.com/questions/4777747
复制相似问题