Skip to content

Latest commit

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

这是用户Alumik创建的项目,下面是原始的readme:

本仓库已停止维护。本项目已迁移至parse-tree项目继续进行维护。

PLDL(Programming Language Description Language)

PLDL 是编程语言描述语言的简称。

本项目在 PLDLParser 的基础上修改。

开发路线图

File Reader

  • Source file reader
  • YAML config reader

Lexer

  • Regular expression engine
    • Regular expression to NFA
    • Finite-state machine
    • State machine visualization
  • Lex rules initialization
  • Lexer core features

Parser

  • Parse rules initialization
  • Symbol and symbol pool
  • Context-free grammar
  • Parse table
  • Production rules
  • Parser core features
  • Build parse tree

词法分析

NFA 转 DFA 示例

以正则表达式 (a|b)*abb 为例。

构建 NFA

KPTaGR.png

转换为 DFA

KPTtIJ.png

多个 NFA 合并示例

由三个正则表达式构建三个 NFA 并合并为一个 NFA

KPTYa4.png

转换为 DFA

KPTUi9.png

语法分析

建立语法分析树示例

现有文法

  1. _S->S (该产生式由文法增广自动产生,不必书写进配置文件)
  2. S->CbBA
  3. A->Aab
  4. A->ab
  5. B->C
  6. B->Db
  7. C->a
  8. D->a

编写 PLDL 配置文件

nonTerminalSymbols:
? A? B? C? D? SterminalSymbols:
a: ab: bignoredSymbols:
startSymbol: Sproductions:
- S -> C b B A
- A -> A a b
- A -> a b
- B -> C
- B -> D b
- C -> a
- D -> a

建立分析表

ACTIONGOTO
ab$SABCD
0s132
1r7
2s4
3acc
4s5678
5r7r8
6s109
7r5
8s11
9s12r2
10s13
11r6
12s14
13r4r4
14r3r3

建立语法分析树

输入串为 abababab 。

KC59Yt.png

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages