怎样把编程语言带入文法来理解
用C语言并不会是一个很好的例子,主要原因:1. 语法规则太多了,用作教学意义略显繁琐2. C语言的语法并非上下文无关文法一个比较好的参考资料是 《虎书》,全称《现代编译原理》,里面附了一个完整的Tiger语言,包括文法的定义。可以考虑去图书馆找,一般应该都有。如果很想参考实际使用的语言,可以考虑查看这个lua的文档,第9节就是完整的文法,算是实际语言中除lisp系之外比较精简的了 Lua 5.2 Reference Manual 。如果真的非常想知道C的,可以在http://port70.net/~nsz/c/下载到C或C++的标准文档,在附录都附有相应的语法汇总
■网友
举个例子,C语言的标识符的文法。identifier::=nondigit #(nondigit | digit)nondigit::="_" | "a" | "A" | "b" | "B" | "c" | "C" | "d" | "D" | "e" | "E" | "f" | "F" | "g" | "G" | "h" | "H" | "i" | "I" | "j" | "J" | "k" | "K" | "l" | "L" | "m" | "M" | "n" | "N" | "o" | "O" | "p" | "P" | "q" | "Q" | "r" | "R" | "s" | "S" | "t" | "T" | "u" | "U" | "v" | "V" | "w" | "W" | "x" | "X" | "y" | "Y" | "z" | "Z"digit::="0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"呐,加粗的那些集合起来就是N集合,{identifier, nondigit, digit}。未加粗引号中的字符的集合就是Σ集合。P包括三个规则,如上。这里在说标识符的文法嘛,标识符identifier就是S,你看identifier是属于N集合吧~有这个,我就可以来定义一个标识符啦~1、第一个字符只能是nondigit,挑一个吧:a(下划线一般不用于用户程序,当然你也可以用)2、第二个字符,,0个或多个nondigit或digit,这里你可以就起一个字符的标识符,但是在程序中定义变量时,可不是个好习惯。当然你完全可以就此打住,定义一个字符的标识符。这里我选个digit吧:03、可以看出,接下来就是重复2的工作了,我这里选择结束。至此,定义了一个标识符:a0identifier::=a #(nondigit | digit)identifier::=a0我可以把它用作变量,像这样:int a0 = 0;关于声明变量和赋值的文法,呵呵,自己看资料吧。中文的:C语言程序设计:现代方法_附录A_C语言语法PS:总觉得那#号别扭,不知道你课本里是怎么表示0个或多个的PSS:现在这个见得频繁的也就数SQL了:MySQL 5.1 SQL语句语法,好多编程的人其实是不知道文法这一说的。
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
