c语言表达式的语法分析,C语言表达式的语法分析.pdf

第? ?卷第 ?期 以沁年!月 南通职业大学学报 ∀#∃ % ;6 8 ? 8 ≅ 7Α 二 ! 8 9 977 Β ?8一5 8的逻辑值 为# 。 赋值表达 式参与上述表达式运算时要加 上括号 , 因为赋值符号的优先级最低 , = ! ?和7 =二 ! 8 ?这两个表达式虽然运算结果都为Χ , 但前者 = 的值为Χ , 后者 = 的值为 ! 。 ? 1 ! 有丰富的运算符 −语言的 运算符有算术运算符 、 关系运算符 、 逻辑运算符 、 赋值运算符 、 逗 号运算符 、 位运算符 、 指 针 运算符等 。 为描述方便 , 本文仅讨论前五类运算符构成的表达式 , 下表列 出了前五类运算符 Δ种 , 其中 “ Ε 十 ” 为正号 , “ Ε 一” 为负号 , “ Ε 5Μ Μ Μ Λ 二二 ϑ ϑ ϑ Ε 一一一 Μ Μ Μ Μ ΜΝ 二二 5ϑ ϑ ϑ ϑ ϑ Χ Χ Χ 5Χ Χ ΧΟ Δ Δ Δ Δ Δ Χ Χ Χ Χ Χ ;; ; ; ?Δ Δ Δ 十十 Π 2 2 2 5 5 5 Δ Δ Δ Δ Δ9 9 9 9 6 6 6 6 6!5 5 5 = = = ? ? ?6 6 6 甲甲 5 5 5 爷爷爷爷 5 5 55 5 5 7 7 7 Ν Ν Ν Ν Ν Ν Ν 由于各种表达式可以混合运算 , 并且括号 常常可以省略 , 因而−语言表 达式的运算 往往非常复杂 。 如表达式 = ! , ? Τ表 ?中的所有符号; , Ρ ∋ Σ Τ Ξ6Ψ ∋ 一 ≅∋ , Υ Ξ?!Ψ / 一 8Ο/Ξ ΜΨ ς 一 ≅ς八 Ξ5Ψ ∋ 一 ≅Υ ???Ψ / 一 ≅) Ξ ϑΨ ς一 ≅ςΚ 0 Ξ Ψ Υ 一 ≅∀ Υ Ξ??Ψ ) 一 ≅)≅ + Ξ Χ Ψ ς 一 ≅ 0 Ξ!Ψ Υ 一 ≅∀ Υ Ξ?ΜΨ ) 一 ≅)≅+ Ξ ΔΨ 0 一 ≅Ε Υ Ξ?ϑΨ ) 一 8)Λ + Ξ! 7 8Ψ 0一 ≅Ε 一 0 ΗΠΨ Υ 一 ≅∀Θ Υ Ξ?ΧΨ ) 一 ≅)7+ Ξ!?Ψ 0一 ≅∀ ΞΜΨ Υ 一 ≅∀Ν Υ Ξ?ΔΨ ) 一 8) + Ξ! Ψ ∀ 一 87∋8 Ξϑ0 Υ 一 ≅∀Κ Υ Ξ 6Ψ ) 一 ≅)Ο + Ξ!!Ψ ∀ 一 ≅Ζ !6 , 该比例值为 6 1 ?! 6 ? 1 −语言表达式的 归 约 利用算符优先函数较容易实现−语言表达式的语法分析 。 我们采用自底向上的分析 法对 −语言表达式进行归约 , 同时进行语义处理 。 归约时 , 利用一个堆栈作为符号栈 , 当 栈顶符号的优先级低于当前输人符号时 , 将当前输人符号压栈 , 否则将栈顶符号归约 。 归 约的具体过程这里不再赘述 , 通过归约和语义处理之后 , 一方面可以发现表达式的语法错 误 , 另一方面也可把表达式翻译成中间代码乃 至 目标代码 。 下面是表达式 = 二! , ? = 9 9 一 Α Θ = 8 的四元式中间代码 Ι 7587 , ! ,一 , = 87?87≅ , ⎯α , = , ⎯! 87ϑ87Λ , ⎯Π , , ⎯Μ 8 7 87Ε 一 , Α ,一 , ⎯58 7?87Ε Φ一 , Α厂 , ⎯? 87Χ879 9 , ⎯! , ⎯Μ , ⎯ ϑ8 7!87 ?4 Α 54则运行后表达式的值为? , = 的值为? , Α的值为6 2 表α −语言表达式算 符优先矩阵 算算符 符符符 十二二二关二二 Ν 二二 Κ 二二 ; ; ; ; 9 9 9 9 , , 8 8 8 8 8 8 8Λ Λ ΛΛ Λ Λ7 7 77 7 77 7 77 7 7Λ Λ Λ7 7 77 7 7 8 8 8 8 8 8 8Λ Λ Λ7 7 7Λ Λ ΛΛ Λ ΛΛ Λ Λ7 7 77 7 77 7 77 7 7 十十 8 8 8Λ Λ Λ7 7 7 ; 7 7 77 7 7Λ 一一 Λ Λ ΛΛ Λ ΛΛ Λ ΛΛ Λ Λ 一一 二二二 8 8 8Λ Λ Λ7 7 77 7 77 7 77 7 77 7 7Λ Λ ΛΛ Λ Λ7 7 7 资资二二二 8 8 8Λ Λ Λ7 7 7 ; Λ Λ ΛΛ Λ ΛΛ Λ ΛΛ Λ ΛΛ Λ Λ7 7 77 7 7 Ν Ν Ν 二二 8 8 87 7 77 7 77 7 77 7 7Λ Λ ΛΛ Λ ΛΛ Λ Λ7 7 7Λ Λ Λ ΚΚΚ 二二 8 8 87 7 77 7 77 7 77 7 77 7 77 7 7Λ 一一 7 7 77 7 7 Τ Τ Τ ; ; ;8 8 8 8 8 8 8 8 8 8 8 8 8 8 88 8 87 7 7Λ Λ Λ 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 88 8 88 8 87 7 7 母母母 8 8 8 8 8 8 8 8 8 8 8 8 8 8 88 8 8≅ ≅ ≅7 7 7 7 7 7 7 7 Λ Λ Λ7 7 77 7 7Λ Λ Λ7 7 77 7 7Λ Λ Λ7 7 77 7 77 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8≅ ≅ ≅8 8 8 8 8 Λ Λ Λ Λ Λ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅8 8 8≅ ≅ ≅ ≅ ≅ Λ Λ Λ 二二 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8≅ ≅ ≅8 8 8 8 8 8 8 8 8 8≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅≅ ≅ ≅≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅8 8 88 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8≅ ≅ ≅8 8 8 8 8 Ο Ο Ο 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8≅ ≅ ≅8 8 8 8 8 Ν 二二 Κ 二二十十十 Θ Θ Θ Ν Ν Ν Η Η Η Η Η ? ? ?? ? ?? ? ?? ? ?? ? ?? ? ?!6 6 6!6 6 6!? ? ?!? ? ? β β β β β 5Μ Μ Μ55 5 5? 5 5 555 5 555 5 555 5 555 5 5 Χ Χ Χ Χ Χ Χ! ! ΚΚΚΚΚΚΚΕ 十十 Ε 一一 Ε 3二 6 Τ ? , Γ ] 6 , Γ尹] 艺 7一58“ ‘ −Η 3二6 δ, ; ‘ , ‘ ] (# , Γ笋] 由组合数的退化性知 , 当 ΓΛ ]时 , 左端的和式中没有非零项 4 当 Γ〕]时 , 左端的和式中有 Γ一]5项非零 。 [_ δΡ ε刃. 刃 .=⎯ Γ2.2 Η⎯ _ δ Σ2λ δ 3 Ρ δ 3 Γδ Π 2Η κε 5 ⎯ Γ . 2. 55= 5 −2 δϕ ΒΓδ.⎯ Π α_εμ δ. ς εΓ ∋Α蛇门Β⎯Ι0. ⎯5ΓΓΠ 哪伴 3,εΠΓ嗯δ2 5 . Α Γ. = ⎯ 23 Γ= 5. ε浏比3 Π , =ΠΓϕ Σ 5 δ 二 ⎯_2 γ = .γ = 罗. δ司Η 23 ϕ ε5= ⎯2 罗⎯⎯ _ δ Πη 3 . = ⎯ Γ2 . # Η ⎯_δ 即λ δ 3 Π δ3 Γ δ Π2 Ηϕε 5 ⎯Γ. 2而= 5 δ 2 Η Η Γ δΓδ.⎯ Π 二β Γι δ . , 朋γ =.2⎯_ δ3 四伴⎯ ’ ⎯ χ 2 Ην= ∀唱 ς εΓ [ 3 Γ= .β 5 δ ??Η 2 ε . γ = ⎯ ⎯_δ Π= . 5δ ⎯Γ55 5δ 1 Ωδ卿。3γ Π ΙΡ ε . ε . = ⎯Γ2. 2Η 阮3 Γ δ Π, ∗ δβδ5ιε习⎯Γ2 . 2 Η−25 . ΑΓ. =⎯ 23 Γ= 5&ε .止 犯3 , Ρε δ δδ ΠΠΓιδ ∗政3 δ. Β δ 7责任编辑 Ι 李业农8 !ϑ

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值