/SyntaxAnalysis

编译原理 语法分析 LL(1)、LR(0)、SLR(1)、LR(1)、LALR(1)

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

语法分析

编译原理语法分析,包括LL(1)、LR(0)、SLR(1)、LR(1)、LALR(1)

规则

符号规则:

  • 空格: 文法和待匹配串中的空格会自动忽略,空格只可作为分隔符,不可作为终结符
  • “|”: 代表“或”。例如“S -> A | b” 代表 “S -> A” 和 “S -> b”。仅支持在“->”右侧出现
  • “ε”: 代表“空”
  • “->”: 代表“推出符号”,“->”左边出现过的都为非终结符,其余未提到的视为终结符

其他限制:

以下使用“_”代表空格

  • 非终结符和终结符中不能包含空格(“->”右边出现空格会以空格为分隔符划分,“->”左边出现空格,则空格必须出现在非终结符前后)
    • A_->_a_b_B合法。
    • _A_->_a_b_B合法。
    • ___A->_a_b__B合法。
    • _AB_->_a_b__B合法。(AB视为一个非终结符)
    • _A_B_->_a_b__B不合法!(不能由两个非终结符推出一个表达式)
  • “->”前后都不能只包含空格
    • ->_a_b__B不合法!
    • A->_不合法!
    • A->a合法。
    • A->a|b合法。(相当于A->aA->b
    • A->a|不合法!(相当于A->aA->
    • A->a|ε合法。(相当于A->aA->ε
    • A|B->a不合法!(暂不支持在“->”左侧使用“|”)
  • “ε”和“|”不能作为终结符或非终结符
    • ε->a不合法!
    • |->a不合法!
    • BεA->a不合法!
    • BCA->a合法。