2022-05-10 15:25:10来源:考而思在线阅读量:449
随着现代社会硬件、软件等方面的需求,使得对编程人才的需求也是居高不下的,因此在前往海外留学的同学们中间,选择就读编程类专业的同学也是有很多的,不够编程的专业的学习难度也是有目共睹的,本次考而思在线为同学们带来的就是编译原理的java实验原则与示例的相关分享,有兴趣的同学不妨与我们一起来了解一下吧。 编译原理的java实验中的设计原则:在Java中,设计原则是一组建议,用作设计制定中的规则。在Ja
随着现代社会硬件、软件等方面的需求,使得对编程人才的需求也是居高不下的,因此在前往海外留学的同学们中间,选择就读编程类专业的同学也是有很多的,不够编程的专业的学习难度也是有目共睹的,本次考而思在线为同学们带来的就是编译原理的java实验原则与示例的相关分享,有兴趣的同学不妨与我们一起来了解一下吧。
编译原理的java实验中的设计原则:
在Java中,设计原则是一组建议,用作设计制定中的规则。在Java中,设计原则类似于设计模式概念。设计原则和设计模式之间的唯一区别是设计原则更加概括和抽象。设计模式包含更多实用的建议和具体内容。设计模式与整个类问题相关,而不仅仅是通用的编码实践。
编译原理的java实验设计原则示例:
1、干燥原理
DRY原则代表“不要重复自己”原则。它是所有编程语言的共同原则之一。DRY原理说:在系统中,每个逻辑片段都应该有一个明确的表示形式。
2、战略调整计划
SRP是另一个代表单一责任原则的设计原则。SRP 原则规定,在一个类中,永远不应该有两个功能。它还解释为:该类应该只有一个且只有一个要更改的原因。当有多个责任时,在同一点上更改该类的原因不止一个。因此,同一类中不应有多个可能受影响的单独功能。
SRP 原则帮助我们:
①从类继承,而不继承或实现我们的类不需要的方法。
②处理错误。
③在不混淆相互依赖关系的情况下实施更改。
3、kiss原则
这是另一个代表保持简单和愚蠢的原则的设计原则。这个原则只是提醒我们保持我们的代码对人类的可读性和简单性。如果该方法处理了多个用例,我们需要将它们拆分为较小的函数。KISS原则指出,在大多数情况下,堆栈调用不应该严重影响我们程序的性能,直到效率不是非常重要。
另一方面,冗长且不可读的方法对于人类程序员来说将很难维护和发现错误。违反 DRY 原则的行为可以由我们自己完成,因为如果我们有一个执行多个任务的方法,则我们无法调用该方法来执行其中一个任务。因此,我们将为此创建另一种方法。
4、打开/关闭原理
开放/封闭原则是SOLID原则类别中的另一个重要设计原则。此原则规定,方法和对象或类应关闭以进行修改,但应打开以进行修改。简而言之,这个原则表明,我们应该在实现我们的模块和类时考虑到未来可能的更新。通过这样做,我们的模块和类将具有通用设计,并且为了扩展它们的行为,不需要更改类本身。
我们可以创建新字段或方法,这样就不需要修改旧代码,删除已创建的字段并重写创建的方法。
开/关原则主要用于防止回归并确保向后兼容性。
5、组成重于继承原则
组合优先于继承原则是Java中另一个重要的设计原则。这个原则帮助我们在Java中实现灵活且可维护的代码。该原则指出,我们应该必须实现接口,而不是扩展类。我们在以下情况下实现继承该类需要实现所有功能、子类可以用作父类的替代。
编译原理的java实验示例:
实验一:词法分析
实验内容:
(1)编写一个词法分析程序,读取文件,对文件内自定义的C语言程序段进行词法分析
(2)输出以文件形式存放的TOKEN串和符号表
(3)要求所输入的C语言程序段包含常见的关键字,标识符,常数,运算符和分界符等
输入文件test.txt:
int var1 = 24;
int var2 = 38;
int n = 55;
int i;
for(i=0; i
var2 += 9;
if (var1 > var2)
{
break;
}
}
输出文件token.txt:
( 17 , int )
( 70 , var1 )
( 54 , = )
( 66 , 24 )
( 61 , ; )
( 17 , int )
( 70 , var2 )
( 54 , = )
( 66 , 38 )
( 61 , ; )
( 17 , int )
( 70 , n )
( 54 , = )
( 66 , 55 )
( 61 , ; )
( 17 , int )
( 70 , i )
( 61 , ; )
( 14 , for )
( 31 , ( )
( 70 , i )
( 54 , = )
( 66 , 0 )
( 61 , ; )
( 70 , i )
( 56 , < )
( 70 , n )
( 61 , ; )
( 70 , i )
( 47 , ++ )
( 32 , ) )
( 64 , { )
( 70 , var2 )
( 49 , += )
( 66 , 9 )
( 61 , ; )
( 16 , if )
( 31 , ( )
( 70 , var1 )
( 55 , > )
( 70 , var2 )
( 32 , ) )
( 64 , { )
( 2 , break )
( 61 , ; )
( 65 , } )
( 65 , } )
输出文件table.txt:
( var1 , -1 , ? )
( var2 , -1 , ? )
( n , -1 , ? )
( i , -1 , ? )
实验二:语法分析
实验内容:
(1)利用 LR(1)分析法,设计一个语法分析程序,对输入符号串进行语法分析
(2)输出推导过程中所用产生式序列并保存在输出文件中
输入待分析代码:
ID = ID + NUM * ID - ( ID + NUM ) $
输入LR1分析表:
,=,+,-,*,/,(,),ID,NUM,int,$,S,A,B,C,S'
0,,,,,,,,shift 2,,shift 3,,,,,,1
1,,,,,,,,,,,accept,,,,,
2,shift 4,,,,,,,,,,,,,,,
3,,,,,,,,shift 5,,,,,,,,
4,,,,,,shift 9,,shift 10,shift 11,,,6,7,8,,
5,,,,,,,,,,,reduce S' -> int ID,,,,,
6,,shift 12,shift 13,,,,,,,,reduce S' -> ID = S,,,,,
7,,reduce S -> A,reduce S -> A,shift 14,shift 15,,,,,,reduce S -> A,,,,,
8,,reduce A -> B,reduce A -> B,reduce A -> B,reduce A -> B,,,,,,reduce A -> B,,,,,
9,,,,,,shift 19,,shift 20,shift 21,,,16,17,18,,
10,,reduce B -> ID,reduce B -> ID,reduce B -> ID,reduce B -> ID,,,,,,reduce B -> ID,,,,,
11,,reduce B -> NUM,reduce B -> NUM,reduce B -> NUM,reduce B -> NUM,,,,,,reduce B -> NUM,,,,,
12,,,,,,shift 9,,shift 10,shift 11,,,,22,8,,
13,,,,,,shift 9,,shift 10,shift 11,,,,23,8,,
14,,,,,,shift 9,,shift 10,shift 11,,,,,24,,
15,,,,,,shift 9,,shift 10,shift 11,,,,,25,,
16,,shift 26,shift 27,,,,shift 28,,,,,,,,,
17,,reduce S -> A,reduce S -> A,shift 29,shift 30,,reduce S -> A,,,,,,,,,
18,,reduce A -> B,reduce A -> B,reduce A -> B,reduce A -> B,,reduce A -> B,,,,,,,,,
19,,,,,,shift 19,,shift 20,shift 21,,,31,17,18,,
20,,reduce B -> ID,reduce B -> ID,reduce B -> ID,reduce B -> ID,,reduce B -> ID,,,,,,,,,
21,,reduce B -> NUM,reduce B -> NUM,reduce B -> NUM,reduce B -> NUM,,reduce B -> NUM,,,,,,,,,
22,,reduce S -> S + A,reduce S -> S + A,shift 14,shift 15,,,,,,reduce S -> S + A,,,,,
23,,reduce S -> S - A,reduce S -> S - A,shift 14,shift 15,,,,,,reduce S -> S - A,,,,,
24,,reduce A -> A * B,reduce A -> A * B,reduce A -> A * B,reduce A -> A * B,,,,,,reduce A -> A * B,,,,,
25,,reduce A -> A / B,reduce A -> A / B,reduce A -> A / B,reduce A -> A / B,,,,,,reduce A -> A / B,,,,,
26,,,,,,shift 19,,shift 20,shift 21,,,,32,18,,
27,,,,,,shift 19,,shift 20,shift 21,,,,33,18,,
28,,reduce B -> ( S ),reduce B -> ( S ),reduce B -> ( S ),reduce B -> ( S ),,,,,,reduce B -> ( S ),,,,,
29,,,,,,shift 19,,shift 20,shift 21,,,,,34,,
30,,,,,,shift 19,,shift 20,shift 21,,,,,35,,
31,,shift 26,shift 27,,,,shift 36,,,,,,,,,
32,,reduce S -> S + A,reduce S -> S + A,shift 29,shift 30,,reduce S -> S + A,,,,,,,,,
33,,reduce S -> S - A,reduce S -> S - A,shift 29,shift 30,,reduce S -> S - A,,,,,,,,,
34,,reduce A -> A * B,reduce A -> A * B,reduce A -> A * B,reduce A -> A * B,,reduce A -> A * B,,,,,,,,,
35,,reduce A -> A / B,reduce A -> A / B,reduce A -> A / B,reduce A -> A / B,,reduce A -> A / B,,,,,,,,,
36,,reduce B -> ( S ),reduce B -> ( S ),reduce B -> ( S ),reduce B -> ( S ),,reduce B -> ( S ),,,,,,,,,
输出产生式序列:
B->ID
A->B
S->A
B->NUM
A->B
B->ID
A->A*B
S->S+A
B->ID
A->B
S->A
B->NUM
A->B
S->S+A
B->(S)
A->B
S->S-A
S'->ID=S
以上就是关于编译原理的java实验原则与示例分享的相关内容了,希望能够为同学们提供到一定的帮助,本次我们的分享暂时也就到这里了,若是还有什么想要了解或者需要专业老师给出指导的话,也可以通过我们右侧的微信与专业老师取得联系哦。
当前文章链接:
凡来源标注“考而思”均为考而思原创文章,版权均属考而思教育所有,任何媒体、网站或个人不得转载,否则追究法律责任
定制课程
电话咨询
客服微信
在线客服