Integer a[]
Integer b[]
Integer rule[]
Integer TIME_MAX = 41
Integer NUM_OF_CELL = 41
public Model() {
a = new Integer[NUM_OF_CELL]
b = new Integer[NUM_OF_CELL]
rule = new Integer[8]
rule[0] = 0
rule[1] = 1
rule[2] = 1
rule[3] = 0
rule[4] = 1
rule[5] = 1
rule[6] = 0
rule[7] = 0
for (int i = 0i <NUM_OF_CELLi++) {
a[i] = 0
}
a[NUM_OF_CELL / 2] = 1
}
public static void main(String[] args) {
Model sm = new Model ()
sm.doIt()
}
private void doIt() {
String str = ""
for (int t = 0t <TIME_MAXt++) {
for (int i = 0i <NUM_OF_CELLi++) {
b[i] = function(a[(NUM_OF_CELL + i - 1) % NUM_OF_CELL],a[i],a[(i + 1) % NUM_OF_CELL])
if (a[i] == 0) {
str = "#"
} else {
str = "*"
}
System.out.print(str + " ")
}
System.out.println("")
for (int j = 0j <NUM_OF_CELLj++) {
a[j] = b[j]
}
}
}
private Integer function(Integer i1, Integer i2, Integer i3) {
if (i1 == 0 &i2 == 0 &i3 == 0) {
return rule[0]
}
if (i1 == 0 &i2 == 0 &i3 == 1) {
return rule[1]
}
if (i1 == 0 &i2 == 1 &i3 == 0) {
return rule[2]
}
if (i1 == 0 &i2 == 1 &i3 == 1) {
return rule[3]
}
if (i1 == 1 &i2 == 0 &i3 == 0) {
return rule[4]
}
if (i1 == 1 &i2 == 0 &i3 == 1) {
return rule[5]
}
if (i1 == 1 &i2 == 1 &i3 == 0) {
return rule[6]
}
if (i1 == 1 &i2 == 1 &i3 == 1) {
return rule[7]
}
return 0
}
}
词法分析:
词法分析的任务是对由字符组成的单词进行处理,从左至右逐个腊轿字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。
词法分析器一般来说有两种方法构造:手工构造和自动生成。手工构造可使用状态图进行工作,自动生成使用确定的有限自动机来实现。
语法分析:
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一轮御肆个语法单位。编译程序的语法规则可用上下文无关文法来刻画。
语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号。
中间代码:
中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现中间代码,即为中间语言程序,中间语言的复杂性介于源拆槐程序语言和机器语言之间。中间语言有多种形式,常见的有逆波兰记号、四元式、三元式和树。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)