
编译原理
懒猫gg
我很懒!
展开
-
自底向上语法分析LR(1)
自底向上分析方法,也称移进-归约分析法,粗略地说它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,就用该产生式的左部非终结符代替相应右部的文法符号串,这称为归约。重复这一过程直到归约到栈顶中只剩文法的开始符号时则为分析成功,也就确认输入串是文法的句子。概述设文法G[S]为:(1)S→aAcBe(2)A→b...原创 2019-10-25 14:14:38 · 5659 阅读 · 0 评论 -
语义分析(三)
Antlr4是一款开源的语法分析器生成工具,能够根据语法规则文件生成对应的语法分析器。现在很多流行的应用和开源项目里都有使用,比如Hadoop、Hive以及Pig等都在使用ANTLR来做语法分析。本文直接引用antlr4工具做自定义的语义分析public int getMax(int c , int d){ return c + d;}int a = 5; int b = 6...原创 2019-11-13 16:41:45 · 765 阅读 · 0 评论 -
语义分析(二)
中间代码的形式逆波兰式《逆波兰表达式&后缀表达式》三元式和树形每个三元式由3部分组成:算符,运算对象1,运算对象2。例如a= b * c + bd;(1)(,b,c)(2)(*,b,d)(3)(+,(1),(2))(4)(=,(3),a)其中第三个式子的(1)和(2),表示第一式子和第二式子的运算结果对于一自运算,只需要选用一个运算对象如-3表示为(-,3,‘’...原创 2019-11-06 14:58:51 · 536 阅读 · 0 评论 -
语义分析(一)
语义分析一般是和语法分析组合在一起执行的,语法分析完成前一步语法树分析的构建(调用某个产生式完成一步规约,形成当前的树节点),然后语义分析便接着调用相应产生式配备的语义动作或子程序,完成属性文法所要求的语义动作(比如类型转换或生成中间代码)。所以对于属性文法而言,属性的加工和使用过程便是语义处理的意义。...原创 2019-11-04 13:44:29 · 6915 阅读 · 0 评论 -
自顶向下语法分析LL(1)
自顶向下分析法就是从文法的开始符号出发,不断建立直接推导,试图构造一个最左推导序列,最终由它推导出与输入符号串完全匹配(相同)的句子。从语法树的角度看,自顶向下分析法就是以开始符号为根节点,试图向下构造一棵语法树,其端末结符号串与输入符号串相同。能使用自顶向下分析技术的文法正是LL(1)文法.LL(1)文法LL(1)的含义:第1个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析...原创 2019-10-14 11:19:54 · 1357 阅读 · 0 评论 -
文法和语言
符号和符号串 字母表: 字母表是符号的非空有穷集合。任何程序语言都有自己的字母表,例如:计算机语言:由符号“0”和“1”组成的字母表,即∑={0,1}Pascal字母表为: ∑={AZ, az, 09, +, -, *, /, <, =, >,:,‘,’, ;,., , (, ), {, }, [, ]}符号串:由字母表中的符号组成的任何有穷序列称之为该...转载 2019-10-11 16:52:29 · 3112 阅读 · 0 评论 -
NFA转DFA及最优化
《正则表达式转NFA》NFA是捏着正则式去比文本,吃掉一个字符,就把它跟正则式比较,匹配就记下来:“某年某月某日在某处匹配上了!”,然后接着往下干。一旦不匹配,就把刚吃的这个字符吐出来,一个个的吐,直到回到上一次匹配的地方。而DFA捏着文本串去比较正则式,看到一个子正则式,就把可能的匹配串全标注出来,然后再看正则式的下一个部分,根据新的匹配结果更新标注。例如用正则式/pe...原创 2019-09-18 15:01:51 · 1286 阅读 · 0 评论 -
正则表达式转NFA
正则表达式的基本运算正则表达式有三种基本的运算:连接(Concatenation), 例如 abc, 由a, b, c组成 联合(Union), 例如 a|b|c, 表示a或者b或者c Kleene闭包(Kleene *), 例如 (ab)*, 表示ab串不出现,或者出现1次或一次以上其它的运算如+, {}等都可以用以上三种基本运算或者运算的组合来表示。正则表达式转换成NFA...原创 2019-09-11 17:43:29 · 20156 阅读 · 0 评论 -
逆波兰表达式&后缀表达式
概念前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。比如:- × + 3 4 5 6 中缀表达式就是常见的运算表达式,如(3+4)×5-6 后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后,比如:3 4 + 5 × 6 -人类最熟悉的一种表达式1+2,(1+2)3,3+42+4等都是中缀表示法。对于人们来说,也是最直观的一种求值方式,先算括号里的,然后算乘除...原创 2019-09-11 10:01:14 · 1461 阅读 · 0 评论