幻の上帝吧 关注:325贴子:3,165
  • 2回复贴,共1

关于Syntax与Grammar的区分,搞不懂啊

取消只看楼主收藏回复

比如说,
Lisp中规定函数调用是
(func args...)
这种形式

而C语言中是
func(args,,,)
这种形式

这个算作Syntax还是Grammar呢?
还有,如果定义了一种类似Lisp的语法:
(if bexp1 doexp1 doexp2 doexp3 ... elsif bexp2 doexp4... else doexp5...)
if else等关键词出现的顺序会影响解析的结果
出现
(if else elsif)
这种不正确输入,应该算作Syntax Error吧?
那么Syntax与Grammar具体怎么区分呢?
求给出详细的例子
@幻の上帝


IP属地:广东1楼2016-11-24 23:08回复
    我所理解的Grammar,是结合做的parser,根据你的文章臆测的。
    设定一个简单的parse格式:
    (....) 可嵌套的列表,内部的不同元由空格区别(字符串除外)
    [...] 等价于 (list ...)
    根据这个定义,可以轻松地写出psrser来生成AST
    然后根据AST进行语义分析。
    那么这个parser所依据的,是不是就是Grammar呢?


    IP属地:广东来自Android客户端4楼2016-11-24 23:58
    回复
      如果我的理解没错的话,那么又有个问题:
      如上都是我基于类Lisp语法所产生的理解,而这一理解对类C语言十分无力。
      在类C语言中,我所听到最多的词就是Grammar,很少听到Syntax。根据你的文章,Grammar表示文法,这很容易让人联想到编译前端的parser,(似乎就是来自于这里),那么语法之于类C语言,是不是就是Grammar了呢?


      IP属地:广东来自Android客户端5楼2016-11-25 00:19
      回复