语法_语法分析器 - CSDN
精华内容
参与话题
  • 完整的词法、语法、语义程序源代码+实验报告(实现过程),参照蒋立源的《编译原理》
  • 编译原理 —— 文法的定义

    千次阅读 2019-01-26 17:36:42
    文法的形式化定义 ...,可以推出其它的语法成分(对应语法分析) PPP: SSS:S∈VNS∈V_NS∈VN​ , 开始符号表示的是该文法中最大的语法成分 示例 产生式的简写 符号约定 文法分类体系 0型文法...

    符号约定


    文法的形式化定义

    VTV_T:终结符是文法所定义的语言的基本符号,有时也称为token。(对应词义分析)
    VNV_N:非终结符是用来表示语法成分的符号,有时也称为"语法变量",可以推出其它的语法成分(对应语法分析)
    PP:
    325f56d286287f411b2a0d8f73f87496.png
    SSSVNS∈V_N , 开始符号表示的是该文法中最大的语法成分

    示例

    ec33bfe68b5a5892c348651b386f767d.png


    产生式的简写

    在这里插入图片描述


    文法分类体系

    0型文法

    • 又称为无限制文法或短语结构文法(PSG)

    例如,有0型文法 G=VNVTPSG=(V_N,V_T,P,S),其中 VN={ABS}VT={01}V_N=\{A,B,S\},V_T=\{0,1\}

    P={S0AB1B0BSA01A1SB1A0S0B}P=\{S→0AB,1B→0,B→SA|01,A1→SB1,A0→S0B\}

    1型文法

    • 又称为上下文有关文法(CSG)
    • CSG中不包含ε产生式

    例如,有1型文法 G=VNVTPSG=(V_N,V_T,P,S),其中 VN={ABS}VT={abc}V_N=\{A,B,S\},V_T=\{a,b,c\}

    P={SaSAabBBABABAAAAAABbBbccBcc}P=\{S→aSA|abB,BA→BA',BA'→AA',AA'→AB,bB→bc,cB→cc\}

    2型文法

    • 又称为上下文无关文法(CFG)
    • 上下文无关文法可用于描述语法构造

    例如,有2型文法 G=VNVTPSG=(V_N,V_T,P,S),其中 VN={ABS}VT={ab}V_N=\{A,B,S\},V_T=\{a,b\}

    P={SaBbAAaaSbAABbbSaBB}P=\{S→aB |bA,A→a|aS|bAA,B→b|bS|aBB\}

    3型文法

    • 又称为正则文法,包括左线性文法和右线性文法
    • 正则文法可用来描述大多数单词,但是,它的生成能力有限,几乎描述不了语法构造
    • 正则文法一般用于词法分析,通过NFA、DFA就可以识别
    • 两套规则不能同时出现在一个语法中,只有完全满足其中的一个才能算 3型文法。

    文法分类体系间的关系


    有关文法的实用限制和变换

    1. 文法中不能含有形如 AAA→A 的规则,这种规则称为有害规则。这样的规则对描言显然是没有必要的,并且它还会引起文法的二义性。所以在设计文法时,应该避免定义里的规则。
    2. 文法中不能有多余规则。所谓多余规则是指文法中出现以下两种规则的情况,一是某条规则 AαA→α 的左部符号 AA 不在所属文法的任何其他规则右部出现,即在推导文法的所有句子中始终都不可能用到的规则;二是对文法中的某个非终结符A,无法从它推导出任何终结符号串来。

    参考地址:

    https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce

    展开全文
  • google搜索语法

    千次阅读 2018-09-18 15:38:16
    基本使用语法 operator:search_term 高级操作符中以all开头的操作符在一般情况下一个查询中只能使用一次,不能和其他操作符混用 intext: 把网页中的正文内容中的某个字符做为搜索条件(但是只能搜索冒号后接的一个...

    基本使用语法 operator:search_term

    高级操作符中以all开头的操作符在一般情况下一个查询中只能使用一次,不能和其他操作符混用

    intext:

    把网页中的正文内容中的某个字符做为搜索条件(但是只能搜索冒号后接的一个关键字).例如在google里输入:intext:钓鱼(广义的).将返回所有在网页正文部分包含"钓鱼(广义的)"的网页,可以与其他操作符混合使用,可单独使用

    allintext:

    使用方法和intext类似,能接多个关键字,能与其他操作符混合使用,可单独使用

    intitle:
    搜索网页标题中是否有所输入字符.例如输入:intitle:五点共圆.将返回所有网页标题中包含"五点共圆"的网页,可以与其他操作符混合使用,可单独使用

    allintitle:

    和ntitle类似,能接多个关键字,但是不能与其他操作符混合使用,可单独使用

    cache:
    输入URL,搜索特定页面的缓存快照,即使目标页面发生变动甚至不存在了,依然可以看到它的副本

    define:
    搜索输入关键词或关键词组的定义来源链接,例如搜索:define:script,将返回关于script的定义,该操作符不能与其他操作符及关键字混用。

    filetype:
    搜索指定类型的文件.例如输入:filetype:asp.将返回所有以asp结尾的文件的URL,可以与其他操作符混合使用[4]

    ext:

    与filetype等价

    info:
    搜索输入URL的摘要信息和其他相关信息,该操作符不能与其他操作符及关键字混用

    inurl:
    搜索输入字符是否存在于URL中.可以联合site指定来找后台、fck之类,可以与其他操作符混合使用,可单独使用

    allinurl:

    类似inurl:,但是可指定多个字符,不能与其他操作符混合使用,可单独使用

    link:
    搜索链接到所输入URL的页面,该操作符不需要关键字,不能与其他操作符及关键字混用


    site: (这个下面Ⅲ也会讲)

    将搜索范围缩小到特定的网站,域或子域

    related:

    冒号后接一个URL,搜索与该URL相关的页面,该操作符不能与其他操作符及关键字混用

    numrange:

    冒号后接数字范围,用一个减号两边接数字来表示。减号左边为最小值,右边为最大值,从而搜索数字

    inanchor:

    搜索一个HTML标记中的一个链接的文本表现形式,即在链接文本中搜索冒号后紧接的一个关键字

    至于“链接文本”,比如
    <a href="GNU/Linuxhttp://www.linux.org/">GNU/Linux</a>
    以上代码中的“GNU/Linux”就是链接文本

    stocks:

    搜索关于指定公司的股票市场信息

    insubject:

    搜索Google组的标题行

    daterange:

    搜索某个日期范围内Google做索引的网页

    展开全文
  • 编译原理之文法

    万次阅读 2018-09-17 19:23:14
    文法:以有穷的集合描述无穷的计划的工具。 字母表:元素的非空有穷集合,其中的元素称为符号,因此也叫符号集。 符号串:由字母表中的元素组成的任何有穷序列,串中的元素个数叫做符号串的长度,空符号串ε,长度...

    文法:以有穷的集合描述无穷的计划的工具。

    字母表:元素的非空有穷集合,其中的元素称为符号,因此也叫符号集。

    符号串:由字母表中的元素组成的任何有穷序列,串中的元素个数叫做符号串的长度,空符号串ε,长度为0。
    符号串的运算:
    连接-符号串x = ab,y=cd, xy = abcd
    方幂-z=xn,当n = 0, z = ε,当 n = 2, z = xx
    集合的闭包-∑* = ∑0 ∪∑1 ∪∑2 ∪…∪∑n
    ∑+ 为正闭包 = ∑1 ∪∑2 ∪…∪∑n

    规则|产生式|生成式,是形如α->β的有序对,读作α定义为β,相同左部的产生式可缩写A->a|b|c|d。

    文法定义的形式-四元组(Vn,Vt,P,S): Vn为非终结符集,Vt 为终结符集,P为规则集,S为识别符|开始符,至少要在一个规则中作为左部出现,Vn ∩ Vt = ∅。

    直接推导=>, 长度为n(n>=1)的推导+=>,长度为n(n>=0)的推导=>【+在=上面】,v=0S1,w=0011,直接推导:0S1 =>0011,使用规则:S->01,γ=0,δ=1;可以说w是v的直接推导,或者w直接归约于v,由识别符号S推导出来的符号串称为文法的句型,如果该符号串仅由终结符号组成,称为句子。

    G[S]称为文法,L[G]为文法的集合表示形式
    若L[G1] = L[G2],则称文法G1和G2是等价的。
    G[S]:S->0S1,S->01
    G[A]:A->0R,A->01,R->A1
    L[S]=L[A]={0n1n|n>=1}

    根据对文法施加不同的限制,分成4种类型。
    0型或短语文法:文法的每个产生式α->β都是α、β属于字符集的闭包区间内且α至少包含有一个非终结符;左边有非终结符,右边有终结符;0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。总之一般文法都是0型文法。

    1型文法:又称为上下文有关文法,

    • α->β均满足|α|<=|β|, 除了S->ε外;小的推出大的或者相等的; 
    • 式子左边可以有多个字符,但必须有一个终结符
    • 式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

    2型文法:又称为上下文无关文法,

    • 式子左边只能有一个字符,而且必须是非终结符
    • 式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符

    3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)

    • 式子左边只能有一个字符,而且必须是非终结符
    • 式子右边最多有二个字符。如果有二个字符必须是一个终结符和一个非终结符,如果只有一个字符,那么必须是终结符。
    • 式子右边的格式一定要一致。也就是说如果有一个是(终结符+非终结符)那么所有的式子都必须是(终结符+非终结符), 如果有一个是(非终结符+终结符),那么所有的式子都必须是(非终结符+终结符)

    正规文法——左线性文法:
    (1):必须是三型文法
    (2):式子右边的产生是(非终结符+终结符)的格式
    正规文法——右线型文法:
    (1):必须是三型文法

    (2):式子右边的产生式是(终结符+非终结符)的格式

    描述一种上下文无关的推导工具:句型的推导和语法树(推导树)

    给定文法G(VN,VT,P ,S),对于G的任何句型都能构造与之关联的语法树。这棵树满足下面四个条件:
    ① 每个结点都有一个标记,此标记是V的 一个符号。(说的是节点一定是终结符或非终结符)
    ② 根的标记是S。(说的是树根的标记是开始符号S)
    ③ 若一结点标记A,至少有一个从它出发的分枝,则A肯定在Vn中(说的是如果一个节点有分支的话,这个节点一定是非终结符)
    ④ 如果标记为A,有n个从它出发的分枝,并且这些分枝的结点的标记(从左到右)为B1, B2,…,Bn,那么A→B1B2,…,Bn一定是P中的一个产生式。(说的是从A出发的叶子节点从左到右排列,一定是P中规则的一个产生式)
    1

    推导的每一步都是对最左非终结符进行替换,称为最左推导;最右推导也称规范推导

    句型的分析:自上而下的分析和自下而上的分析。

    一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语;相对于非终结符的短语
    如果子树中不再包含其他的子树,即A只能推导出b,而b不能再推出其他的式子,则b为此句型的直接短语;相对于规则的直接短语
    直接短语中的最左直接短语为该句型的句柄[最右推导,右句型];某句型的句柄
    案例:
    S -> a|b|(T)
    T -> TdS|S
    证明(Sd(T)db)是S的一个句型,并求出短语,直接短语,句柄
    此文法的抽象语法树为:
    1
    由此可得S=(Sd(T)db)为此文法的一个句型:
    • 短语:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)
    • 直接短语:S,(T),b
    • 句柄:S

    文法的实用限制:
    有害规则:形如U->U的规则,没用,容易引起二义性;
    多余规则:非终结符不在任意规则的右部出现,不可到达;非终结符不能推导出终结符,不可终止;

     

    展开全文
  • 谷歌搜索语法(一)基本语法

    万次阅读 多人点赞 2016-12-23 19:01:24
    Google是一款十分强大的搜索引擎,黑客们常常借助它搜索网站的一些敏感目录和文件,甚至可以利用它的搜索功能来自动攻击那些有漏洞的网站;而有些人可以通过搜索把某个个人的信息,包括住址、电话号码、出生年月等都...

    Google搜索语法(一)基本语法

    Google是一款十分强大的搜索引擎,黑客们常常借助它搜索网站的一些敏感目录和文件,甚至可以利用它的搜索功能来自动攻击那些有漏洞的网站;而有些人可以通过搜索把某个个人的信息,包括住址、电话号码、出生年月等都可以搜索出来;当然我们在日常的生活中正确的借助Google搜索也可以更加高效的找到我们需要的东西。

    关于搜索,像国内外的百度,bing,Yahoo,soso等好多网站都可以做到,但是他们的影响力却远远不如Google大?那么为什么Google这么令人关注呢?我们先来了解一下Google的搜索特色。
    Google的一些特色包括:支持多种搜索语言,种数达到了上百种;搜索速度快,据说Google拥有8000多台服务器,200多条T3级别的宽带;Google还拥有专利网页级别技术PageRank,可以提供高命中率的搜索结果;Google的智能化的“手气不错”功能,可以提供最符合要求的网站……在这里就不一一列举了。
    为了做更深入了了解,我们还是先来学习一下Google的搜索语法。谷歌的搜索语法分成了两大类,一类是基本语法,另一类就是高级语法了。这一次,就先介绍一下Google的基本语法。

    基本语法


    谷歌的默认搜索是and逻辑,意思就是,我们在输入关键字后进行搜索时,如输入:“program google”后,会搜出包含“program”和“google”的文件内容,如图1。
    图1:输入program google的结果。
    说到这里,我就插入一个小知识点:基础布尔逻辑。
    对于一个搜索引擎来说,进行搜索的时候是要搜索到匹配到所有关键词的页面,还是包含关键词中的任意关键词就可以,取决于一个搜索引擎的一些特别算法,称之为搜索引擎的布尔逻辑默认值。

    而google就是用and作为默认逻辑(搜索到所有的关键词),当然这个前提是我们没有输入一些特殊的命令。如果你不确定你要搜索的内容,或者你想搜索两个中的任意一个,那么就要使用关键词“OR”。注意:OR是大写的,小写是不起作用的,而且,每一个关键词与“OR”之间是有一个空格的,我们来看一下搜索结果。
    图2:输入program OR google的结果
    当然,可以预想的是,google的结果要比program多得多,所以结果第一页全是有关google的内容。此外,还可以借助计算机体系语言中的“|”来代替“OR”,效果是一样的。

    当然,如果你希望搜索“programgoogle”的内容,而不希望这两个单词之间有任何其他的内容,那么就要使用双引号把搜索的内容组成一个词组来达到目的。如图3所示。 图3:使用双引号时的搜索结果。
    如上图所示,结果中的programgoogle都是在一起的,没有分割。当然这样的结果比较少,只有2740个,但是看图1,结果却有7亿多个。而且,大部分搜索引擎都有智能断句的功能,如果没有特殊的命令,搜索引擎会一定量的根据大众的语言使用习惯来判断你要搜索什么,而这样的做法,不仅仅没有使搜索引擎显得不听话,反而对大众来讲搜索引擎变得十分智能和高效!

    但是如果我们只想看到“program”的内容,而不希望看到“google”的内容,就可以把“-”(减号或者破折号)应用到搜索当中去,语法为“program -google”,注意,“-”之前是有一个空格的,而其后却是和下一个关键词是紧紧相连的!搜索的结果如下图4所示。可以看得到结果中都会包含program,而不包含google。
    图4:输入“program -google的结果”
    说到这里,还要提一下google的约束扩展问题了。一般来说,当输入关键词后,google会把相关网页和信息的结果呈现在我们面前。然而,有一些单词在搜索引擎中是会被智能忽略的,导致我们得不到想要的结果。比如十分常用的“www”和“the”,基本上任何一个网页上都会找到的东西,就会被google自动忽略(不要觉得这样不好,还是那个道理,在实际引用当中这样做反而显得更加高效和智能)。如果我们不想忽略这些词进行查询,就得在这些关键词的前面加上符号“+”。如下图5所示:
    图5:加号的区别之处
    看上去两者好像没有什么大的区别,其实仔细比较一下搜索结果就可以看得出,加上加号的搜索结果有一万多个,而不加加号的结果却有着55亿多!而因为google和www的关联度比较高,所以在前面的结果表现的差别不大。
      
    除了上述字符之外,一些搜索引擎支持一种叫做“stemming”(填充)的技术。Stemming是指在查询的关键词中添加一些通配符,通常是“”,有时候也可能是“?”,这些通配符的作用是要求搜索引擎进行查询是可以返回多个不同的结果。其中通配符代表占位,可以匹配其他任意字母和单词,而其他的字或词组与用户输入的相同。如我们想要搜索“Lionel Messi”的内容,却忘记了第一个单词的一些拼写,就可以输入“"lMessi"”进行查询,注意:此处整个字符串是要用一个英文半角双引号括住的!结果如下图所示。 这里写图片描述
    可以看到,google自动匹配出Lionel Messi的内容并且进行了搜索。这样的方式有利于我们只能记住单词或短语的一部分的内容时使用。


    END.

    基本的语法就讲到这里,上述的内容也没有列全,因为有些搜索功能不太常用。不过,这些语法就已经够我们日常使用的了,基本语法就是做基本的事,google也有一些高级的语法,我将在下一篇博文中展示。如有错误,还请指出。
    下一篇:Google搜索语法(二)高级语法

    展开全文
  • JavaSE基础语法

    2020-10-27 16:22:28
    基础语法注释注释概述注释分类关键字关键字概述关键字特点常量常量的概述常量的分类数据类型计算机存储单元数据类型变量标识符类型转换 注释 注释概述 注释是在程序指定位置添加的说明性信息 注释不参与程序运行,...
  • 某些重要语法

    千次阅读 2010-10-07 08:23:00
    第一课: ...本语法注意:一定是过去的动作,也就是只能用在动词过去式,形容词等不可以; 3. 다시피 하다 用在动词词干后面,表示某个动作重复进行;翻译成中文“几乎都…… ”
  • 语法

    2019-10-13 08:41:25
  • 1. -(으)ㄹ 턱이 없다 用于动词词干后,表示没有理由做某事,即不会去做某事。 예: 기대도 하지만! 그 사람이 올 턱이 없어 2. -(으)리라고 用于动词词干后,其后与결심하다,말하다等动词结合使用 ...
  • 韩语语法(三)

    2011-08-20 08:46:25
    ~다면서요? 用于说话人确认他所听到的事情是否属实。 동사(动词的几种用法): .../******************************************************/ ...A:선생님,한국 사람들은 매운 음식을 잘 먹는다면서요?...
  • Markdown语法图文全面详解(10分钟学会)

    万次阅读 多人点赞 2018-08-02 17:10:27
    写过博客或者github上面的文档的,应该知道Markdown语法的重要性,不知道的朋友们也别着急,一篇博文轻松搞定Markdown语法。话说这个语法超级简单,一看就会,不信你点进来看看。 快捷键 功能 快捷键 ...
  • shell脚本基本语法详解

    万次阅读 多人点赞 2016-09-28 20:16:04
    /bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器。一.shell变量shell变量和一些编程语言不同,一般shell的变量赋值的...
  • Markdown 语法手册 (完整整理版)

    万次阅读 多人点赞 2016-09-15 22:35:35
    转载:http://blog.leanote.com/post/freewalk/Markdown%E8%AF%AD%E6%B3%95%E6%89%8B%E5%86%8C 0. 目录 0. 目录1. 斜体和粗体2. 分级标题3. 超链接 ...3.1. 行内式3.2....4. 锚点5....5.1. 无序列表5.2....
  • Matlab的循环语法

    万次阅读 2019-07-25 12:05:55
    Matlab的循环语法 1、用循环方式实现从1到999的累加 2、(1)、for循环方式实现: %% %初始化sum的值为0 sum = 0; %从1开始遍历到999 for i = 1:999 %对遍历的每一个元素进行累加 sum = ...
  • 【Emmet】HTML速写之Emmet语法规则

    万次阅读 多人点赞 2018-07-16 18:17:31
    ...一堆的标签、属性、括号等,头疼。这里推荐一个Emmet语法规则,让你写的时候爽到飞起,能大大提高代码...Emmet是一款插件,只要能安装他的编辑器都能使用,大部分编辑器都可以使用该语法规则,我们平时开发的Sublim...
  • 【C#高级语法特性锦集】

    千次阅读 2019-06-06 14:25:28
    C#高级语法特性锦集【个人汇总】# C#/.NET 泛型+索引器搭建通用字典Dictionary C#/.NET 枚举特性扩展——系统特性及自定义特性 C#/.NET 反射(配置文件)实现简单工厂 C#/.NET Unity静态实现AOP功能——实际案例...
  • Verilog的基础语法

    千次阅读 多人点赞 2019-09-19 14:30:29
    虽然Verilog硬件描述语言有很完整的语法结构和系统,这些语法结构的应用给设计描述带来很多方便。但是Verilog是描述硬件电路的,它是建立在硬件电路的基础上。有些语法结构是不能与实际硬件电弧对应起来的,比如for...
  • SQL基本语法入门 看这里就够了

    万次阅读 多人点赞 2019-10-21 15:42:16
    SQL执行顺序 第一步:执行FROM 第二步:WHERE条件过滤 第三步:GROUP BY 分组 第四步:执行SELECT 投影列 第五步:HAVING条件过滤 ...第六步:执行ORDER BY排序 ...1、添加列名、设置主键、设...
  • 语法基础——Objective-C语法基础

    万次阅读 多人点赞 2017-02-21 19:37:29
    前言 学习过Swift之后,好久没用已经生疏了,...支持C语法 支持面向对象特性 兼容性好,可以同时在项目中使用OC、C++,也可以引入C、C++库文件 OC中没有命名空间机制,也没有包的概念,为了区分不同的类,在类名...
  • JavaScript语法规范

    万次阅读 2017-01-02 15:12:24
    目录 1.标识符的命名规范 2.程序注释 3.常用标识符命名方法 4.ECMAScript5严格模式 ...JavaScript编写语法遵循ECMAScript标准,以下是ECMAScript语言的一些基本规范。 1.标识符的命名规范 ECMAScript标识...
1 2 3 4 5 ... 20
收藏数 2,272,070
精华内容 908,828
关键字:

语法