一键生成`ABB`文法解析器

Compiler of ABB

The C# source code of the compiler ABB is generated by bitzhuwei.GrammarFormat.

Grammar

// 3 VnRegulations:
A : A '+' B // [0]
  | 'a' ; // [1]
B : 'b' ; // [2]
// 0 VtPatterns:

Lexical Analyzer States

Unsupported markdown: list

BeginToken '+'
ExtendToken '+'

a
BeginToken 'a'
ExtendToken 'a'

b
BeginToken 'b'
ExtendToken 'b'

DFA0 wholeStart

DFA1 {1}

DFA2 {1}

DFA3 {1}

nullable

[0]: nullable( A ) = False
[1]: nullable( '+' ) = False
[2]: nullable( B ) = False
[3]: nullable( 'a' ) = False
[4]: nullable( 'b' ) = False
[5]: nullable(  ) = True

FIRST

[0]: FIRST( A ) = { 'a' }
[1]: FIRST( B ) = { 'b' }
[2]: FIRST( '+' ) = { '+' }
[3]: FIRST( 'a' ) = { 'a' }
[4]: FIRST( 'b' ) = { 'b' }
[5]: FIRST(  ) = { empty }
[6]: FIRST( A '+' B ) = { 'a' }

FOLLOW

[0]: FOLLOW( A ) = { '+' }
[1]: FOLLOW( B ) = { '+' }

LL(1) Syntax Machine

状态 '+' 'a' 'b'
A R[0] R[1]
B R[2]

LR(0) Syntax Machine

状态 '+' 'a' 'b' '¥' A B
0 S2 G1
1 S3 完成
2 R[1] R[1] R[1] R[1]
3 S5 G4
4 R[0] R[0] R[0] R[0]
5 R[2] R[2] R[2] R[2]

A

'a'

'+'

B

'b'

'¥'

'+' 'a' 'b' '¥'
R[1]= A : 'a' ;

'+' 'a' 'b' '¥'
R[0]= A : A '+' B ;

'+' 'a' 'b' '¥'
R[2]= B : 'b' ;

LR(1) syntax states

syntaxState0
[-1] BCounter> : ⏳ A ;
[0] A : ⏳ A '+' B ;
[1] A : ⏳ 'a' ;

syntaxState1
[-1] BCounter> : A ⏳ ;
[0] A : A ⏳ '+' B ;

syntaxState2
[1] A : 'a' ⏳ ;

syntaxState3
[0] A : A '+' ⏳ B ;
[2] B : ⏳ 'b' ;

syntaxState4
[0] A : A '+' B ⏳ ;

syntaxState5
[2] B : 'b' ⏳ ;

SLR(1) Syntax Machine

状态 '+' 'a' 'b' '¥' A B
0 S2 G1
1 S3 完成
2 R[1] R[1]
3 S5 G4
4 R[0] R[0]
5 R[2]

A

'a'

'+'

B

'b'

'¥'

'+' '¥'
R[1]= A : 'a' ;

'+' '¥'
R[0]= A : A '+' B ;

'+'
R[2]= B : 'b' ;

LR(1) syntax states

syntaxState0
[-1] BCounter> : ⏳ A ;
[0] A : ⏳ A '+' B ;
[1] A : ⏳ 'a' ;

syntaxState1
[-1] BCounter> : A ⏳ ;
[0] A : A ⏳ '+' B ;

syntaxState2
[1] A : 'a' ⏳ ;

syntaxState3
[0] A : A '+' ⏳ B ;
[2] B : ⏳ 'b' ;

syntaxState4
[0] A : A '+' B ⏳ ;

syntaxState5
[2] B : 'b' ⏳ ;

LALR(1) Syntax Machine

状态 '+' 'a' 'b' '¥' A B
0 S2 G1
1 S3 完成
2 R[1] R[1]
3 S5 G4
4 R[0] R[0]
5 R[2] R[2]

A

'a'

'+'

B

'b'

'¥'

'¥' '+'
R[1]= A : 'a' ;

'¥' '+'
R[0]= A : A '+' B ;

'¥' '+'
R[2]= B : 'b' ;

LR(1) syntax states

syntaxState0
[-1] BCounter> : ⏳ A ; '¥'
[0] A : ⏳ A '+' B ; '¥' '+'
[1] A : ⏳ 'a' ; '¥' '+'

syntaxState1
[-1] BCounter> : A ⏳ ; '¥'
[0] A : A ⏳ '+' B ; '¥' '+'

syntaxState2
[1] A : 'a' ⏳ ; '¥' '+'

syntaxState3
[0] A : A '+' ⏳ B ; '¥' '+'
[2] B : ⏳ 'b' ; '¥' '+'

syntaxState4
[0] A : A '+' B ⏳ ; '¥' '+'

syntaxState5
[2] B : 'b' ⏳ ; '¥' '+'

LR(1) Syntax Machine

状态 '+' 'a' 'b' '¥' A B
0 S2 G1
1 S3 完成
2 R[1] R[1]
3 S5 G4
4 R[0] R[0]
5 R[2] R[2]

A

'a'

'+'

B

'b'

'¥'

'¥' '+'
R[1]= A : 'a' ;

'¥' '+'
R[0]= A : A '+' B ;

'¥' '+'
R[2]= B : 'b' ;

LR(1) syntax states

syntaxState0
[-1] BCounter> : ⏳ A ; '¥'
[0] A : ⏳ A '+' B ; '¥' '+'
[1] A : ⏳ 'a' ; '¥' '+'

syntaxState1
[-1] BCounter> : A ⏳ ; '¥'
[0] A : A ⏳ '+' B ; '¥' '+'

syntaxState2
[1] A : 'a' ⏳ ; '¥' '+'

syntaxState3
[0] A : A '+' ⏳ B ; '¥' '+'
[2] B : ⏳ 'b' ; '¥' '+'

syntaxState4
[0] A : A '+' B ⏳ ; '¥' '+'

syntaxState5
[2] B : 'b' ⏳ ; '¥' '+'

End

posted @   BIT祝威  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
canvas start.

canvas end.



点击右上角即可分享
微信分享提示