1、编写一个词法分析器,它能够识别并输出源代码中所有的整数。假设输入字符串只包含由空格分隔的整数和可能的其他字符(忽略它们) 2、编写一个词法分析器,该词法分析器能够识别并输出加减乘除运算符 c完整代码
时间: 2024-09-19 07:11:25 浏览: 13
创建一个简单的词法分析器,可以分为两部分:一个用于处理整数识别,另一个用于处理算术运算符。这里我们将使用Python作为示例语言,因为它的简洁性和易读性。请注意,这只是一个基本的示例,实际的词法分析器可能会更复杂,并依赖于特定的解析库如ply或ANTLR。
1. **识别整数的部分**:
```python
import re
def is_integer(s):
try:
int(s)
return True
except ValueError:
return False
def extract_integers(input_string):
tokens = input_string.split()
integers = [token for token in tokens if is_integer(token)]
return integers
# 示例
input_str = "10 20 hello 30 world 40"
integers = extract_integers(input_str)
print("Integers:", integers)
```
2. **识别运算符的部分**:
```python
def is_operator(op):
operators = ['+', '-', '*', '/']
return op in operators
def extract_operators(input_string):
operators = []
for i in range(len(input_string)):
if is_operator(input_string[i]):
operators.append(input_string[i])
return operators
# 示例
input_str = "+ - * /"
operators = extract_operators(input_str)
print("Operators:", operators)
```
**完整的代码整合:**
```python
def lexer(input_string):
# 整数识别
integer_tokens = extract_integers(input_string)
# 运算符识别
operator_tokens = extract_operators(input_string)
return integer_tokens, operator_tokens
# 示例
input_str = "10 + 20 - 30 * 40 / hello world"
integer_tokens, operator_tokens = lexer(input_str)
print(f"Integers: {integer_tokens}")
print(f"Operators: {operator_tokens}")
```