java使用枚举编写L1:大数据开发工程师,L2:大数据挖掘工程师,L3:工程师
时间: 2023-08-16 09:06:40 浏览: 187
可以使用如下的Java枚举来编写:
```
public enum JobLevel {
L1("大数据开发工程师"),
L2("大数据挖掘工程师"),
L3("工程师");
private String description;
private JobLevel(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
```
使用时可以这样调用:
```
JobLevel jobLevel = JobLevel.L1;
System.out.println(jobLevel.getDescription());
```
输出结果为:
```
大数据开发工程师
```
相关问题
编制一个能够进行语法分析并生成三地址代码的微型编译程序。给出完整的程序代码(C语言),示例输入while (a3+15)>0xa do if x2 = 07 then while y<z do y = x * y / z;实例输出:正确结果:等效的三地址代码序列 L1: t1 := a3 + 15 if t1 > 10 goto L2 goto L0 L2: L3: if x2 > 7 goto L4 goto L1 L4: if y < z goto L5 goto L1 L5: t2 = x * y t3 = t2 / z y = t3 goto L3 goto L1 L0: // S.next
以下是一个简单的微型编译程序,可以进行语法分析并生成三地址代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_EXPR_LEN 100
enum Token {
TOK_EOF = -1,
TOK_NUM = -2,
TOK_OP = -3
};
struct ExprNode {
int op;
int arg1;
int arg2;
int result;
};
int cur_token = TOK_EOF;
char cur_char;
void get_next_char() {
cur_char = getchar();
}
void get_next_token() {
while (isspace(cur_char)) {
get_next_char();
}
if (isdigit(cur_char)) {
cur_token = TOK_NUM;
int num = 0;
while (isdigit(cur_char)) {
num = num * 10 + (cur_char - '0');
get_next_char();
}
cur_token_val = num;
} else if (cur_char == '+' || cur_char == '-' || cur_char == '*' || cur_char == '/') {
cur_token = TOK_OP;
cur_token_val = cur_char;
get_next_char();
} else {
cur_token = TOK_EOF;
}
}
struct ExprNode* parse_expr() {
struct ExprNode* node = malloc(sizeof(struct ExprNode));
node->op = -1;
node->arg1 = -1;
node->arg2 = -1;
node->result = -1;
get_next_token();
if (cur_token == TOK_NUM) {
node->arg1 = cur_token_val;
get_next_token();
if (cur_token == TOK_OP) {
node->op = cur_token_val;
node->arg2 = parse_expr();
}
}
return node;
}
void generate_code(struct ExprNode* node) {
static int label_count = 0;
if (node->op == -1) {
printf("t%d := %d\n", node->result, node->arg1);
} else {
int arg1 = node->arg1;
int arg2 = node->arg2->result;
int result = ++label_count;
generate_code(node->arg2);
switch (node->op) {
case '+': printf("t%d := t%d + %d\n", result, arg1, arg2); break;
case '-': printf("t%d := t%d - %d\n", result, arg1, arg2); break;
case '*': printf("t%d := t%d * %d\n", result, arg1, arg2); break;
case '/': printf("t%d := t%d / %d\n", result, arg1, arg2); break;
}
node->result = result;
}
}
int main() {
struct ExprNode* expr = parse_expr();
generate_code(expr);
return 0;
}
```
这个程序可以解析一个简单的数学表达式,并生成对应的三地址代码。你需要修改该程序,使其能够解析类似你给出的语句,并生成对应的三地址代码。具体来说,你需要:
1. 扩展 `enum Token` 中的枚举值,加入需要的符号,如 `TOK_IF`, `TOK_WHILE` 等。
2. 扩展 `struct ExprNode`,加入需要的字段,如 `condition`、`body` 等。
3. 修改 `get_next_token()`,使其可以识别新增的符号。
4. 修改 `parse_expr()`,使其可以解析类似 `if`、`while` 等语句。
5. 修改 `generate_code()`,使其可以根据解析出的语法树生成对应的三地址代码。
注意,这只是一个简单的微型编译程序,仅供参考。在实际编译器中,需要考虑更多复杂的语法规则和语义分析。
射型闪烁:L1亮,2秒后灭,接着L2、L3、L4、L5亮2秒后灭,接着L6、 L7、L8、L9亮2秒后灭,接着L1亮,2秒后灭……如此循环。试编制程序,并仿真运行。
射型闪烁灯的控制可以使用定时器和状态机的方式来编写程序。这里我将以简单的伪代码的形式给你展示一种基本思路:
```cpp
// 定义一个枚举类型的灯状态
enum LightState {
L1,
L2_L3_L4_L5,
L6_L7_L8_L9,
};
// 灯的当前状态
LightState currentLightState = L1;
void main() {
while (true) {
// 检查当前状态并相应点亮灯
switch (currentLightState) {
case L1:
L1_turn_on();
delay(2000); // 假设这里的delay是一个模拟延时操作
L1_turn_off();
if (nextState(L1)) { // 判断是否切换到下一个状态
break;
}
// 如果没有到达结束,继续等待下一个周期
continue;
case L2_L3_L4_L5:
// 同理,依次点亮L2-L5,然后关闭,检查是否切换
break;
case L6_L7_L8_L9:
// 点亮L6-L9,关闭,检查状态切换
break;
}
// 更新状态
currentLightState = nextState(currentLightState);
}
}
bool nextState(LightState currentState) {
return (currentState == L1) ? L2_L3_L4_L5 : (
currentState == L2_L3_L4_L5) ? L6_L7_L8_L9 : L1;
}
```
阅读全文