以下shell脚本是什么意思,转船python是什么样的。 case ${WORK_ORDER} in FT1|FT2|TSS|ST|ORT) LGetOnlineDiskInfo "accurate.txt" "${ON_LINE_INFO_FILE}" echo "fail" fi ;; *) echo "pass" ;; esac
时间: 2023-07-21 16:08:39 浏览: 44
这是一个 shell 脚本中的 case 语句,根据变量 ${WORK_ORDER} 的值进行不同的处理。如果 ${WORK_ORDER} 的值为 FT1、FT2、TSS、ST 或 ORT,则会调用 LGetOnlineDiskInfo 函数,并将 accurate.txt 和 ${ON_LINE_INFO_FILE} 作为参数传递给该函数。然后输出字符串 "fail"。如果 ${WORK_ORDER} 的值不属于上述几种情况,则直接输出字符串 "pass"。
以下是相应的 Python 代码实现:
```
if WORK_ORDER in ["FT1", "FT2", "TSS", "ST", "ORT"]:
LGetOnlineDiskInfo("accurate.txt", ON_LINE_INFO_FILE)
print("fail")
else:
print("pass")
```
其中,LGetOnlineDiskInfo 函数需要提前定义。
相关问题
给定下列 LL(1)文法,编写递归下降程序,分析表达式 i+i*2 的合法性,并 能显示出分析过程。 E→TE1 E1→+TE1|-TE1|ε T→FT1 T1→*FT1|/FT1|ε F→(E)|i
以下是该 LL(1)文法的递归下降程序(使用 Python 语言实现):
```python
def E():
T()
E1()
def E1():
if lookahead == '+':
match('+')
T()
E1()
elif lookahead == '-':
match('-')
T()
E1()
else:
pass
def T():
F()
T1()
def T1():
if lookahead == '*':
match('*')
F()
T1()
elif lookahead == '/':
match('/')
F()
T1()
else:
pass
def F():
if lookahead == '(':
match('(')
E()
match(')')
elif lookahead == 'i':
match('i')
else:
raise SyntaxError("Invalid token")
def match(token):
global lookahead
if lookahead == token:
lookahead = next_token()
else:
raise SyntaxError("Unexpected token")
def next_token():
global position
if position < len(expression):
token = expression[position]
position += 1
return token
else:
return None
```
假设输入的表达式为 "i+i*2",初始时 `lookahead` 为 "i",`position` 为 0。程序开始执行 `E()`,调用 `T()`,`lookahead` 不是 "*" 或 "/",所以调用 `F()`。`lookahead` 是 "i",匹配成功,调用 `match('i')`,此时 `lookahead` 变为 "+",再调用 `T1()`。`lookahead` 是 "*",匹配成功,调用 `match('*')`,`lookahead` 变为 "2",再调用 `F()`。`lookahead` 是 "2",匹配成功,调用 `match('2')`,`lookahead` 变为 None。此时整个表达式已经被成功分析,程序结束。
分析过程如下:
```
E()
T()
F()
i
T1()
E1()
+
T()
F()
i
T1()
*
F()
2
T1()
```
因此,该表达式是合法的。
用符号表示如下: E→T|E+T|E-T T→F|T*F|T/F F→i|(E) 2、消去上面文法的左递归 E→TE1 E1 →+TE1|-TE1|ε T→FT1 T1→*FT1|/FT1|ε F →i|(E) 3. 按消去左递归的文法,使用Python语言,写出对应的递归下降语法分析器。
以下是Python代码:
```
def match_terminal(expected_token, tokens, index):
if tokens[index] == expected_token:
return index + 1
else:
return -1
def parse_E(tokens, index):
index = parse_T(tokens, index)
if index == -1:
return -1
else:
return parse_E1(tokens, index)
def parse_E1(tokens, index):
next_index = match_terminal('+', tokens, index)
if next_index != -1:
next_index = parse_T(tokens, next_index)
if next_index == -1:
return -1
else:
return parse_E1(tokens, next_index)
else:
next_index = match_terminal('-', tokens, index)
if next_index != -1:
next_index = parse_T(tokens, next_index)
if next_index == -1:
return -1
else:
return parse_E1(tokens, next_index)
else:
return index
def parse_T(tokens, index):
index = parse_F(tokens, index)
if index == -1:
return -1
else:
return parse_T1(tokens, index)
def parse_T1(tokens, index):
next_index = match_terminal('*', tokens, index)
if next_index != -1:
next_index = parse_F(tokens, next_index)
if next_index == -1:
return -1
else:
return parse_T1(tokens, next_index)
else:
next_index = match_terminal('/', tokens, index)
if next_index != -1:
next_index = parse_F(tokens, next_index)
if next_index == -1:
return -1
else:
return parse_T1(tokens, next_index)
else:
return index
def parse_F(tokens, index):
next_index = match_terminal('i', tokens, index)
if next_index != -1:
return next_index
else:
next_index = match_terminal('(', tokens, index)
if next_index != -1:
next_index = parse_E(tokens, next_index)
if next_index == -1:
return -1
else:
return match_terminal(')', tokens, next_index)
else:
return -1
def parse(tokens):
index = parse_E(tokens, 0)
if index != -1 and index == len(tokens):
print("RIGHT, AGAIN! 语法分析完毕!")
else:
print("WRONG! 退出语法分析!")
tokens = ['i', '+', 'i', '*', 'i', '#']
parse(tokens)
```