zoukankan      html  css  js  c++  java
  • 中文编程实践——第一次编程作业

    这个作业属于哪个课程软件工程
    这个作业要求在哪里 第一次编程作业
    这个作业的目标 中文编程
    作业正文 如下
    其他参考文献  

     Github地址:https://github.com/tianzhiyimj/TheFirstHomework

    代码行数:108行
    分析时间:16小时
    编码时间:12-24小时

    对题目的思考

    拿到题目我首先想到的是前几年“中文编程”的热潮,其中大部分是利用C、C#,Java,Python进行套皮的山寨货。

    不过我想能否从底层的层面上进行自定义编程语言,所以我在简书上找到了:自定义编程语言的实现

    其中比较简单的描述了更改语言逻辑的一些要求,如果有想了解的朋友们可以稍微看一看。

    我在2月5号进行了初步的尝试,在下图中我试着学习原文章中用JS对运算和比较符进行更改。

    然后发现一个问题,当我想要分析巴斯克范式(BNF范式)时我的专业知识已经不够用了,在搜寻资料之后认识到这是一个需要时间去理解和学习的东西。

     (附上难以理解的东西)

     

    (以及复杂的AST语法树)

    我在认识到自己不足之处后,选择了更为简便的办法,也许是一种投机取巧。C语言中的#define 也就是宏定义手法,可以直接将常见的关键字和符号替换成中文。

    2.6日 实践后得出结论:define可以用中文定义,但是Dev-C++5.1.1编译器不能通过运行,我也懒得再去弄适配的编译器,选择更换思路。

     颈椎疼,罢工半天_(:з」∠)_

    2.7日

    将题目需求的功能模块化,每个模块可单独调用。

    正则功能还未上线,运算内容有些问题,明天起来再改吧。

     1 no = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9, '': 10}  # 中文数字
     2 inputs = []     # 输入流
     3 var = []        # 变量流
     4 data = []       # 数据流
     5 regexp = []     # 正则流
     6 state = None    # 状态
     7 
     8 
     9 def get():
    10     # 用户输入流
    11     inputs.append(input().split()[-1])
    12     print(inputs)
    13 
    14 
    15 def get_key(v):
    16     for k, val in no.items():
    17         if v == val:
    18             return k
    19 
    20 
    21 while True:
    22     inputs.append(input().split()[-1])         # 输入存到数据流
    23     # 状态机
    24     if not state:
    25         if inputs[-1] == '整数':
    26             state = '定义'
    27         elif inputs[-1] in var:
    28             state = '运算'
    29         elif inputs[-1] == '看看':
    30             state = '看看'
    31         elif inputs[-1] == '如果':
    32             state = '正则'
    33 
    34     if state == '定义':
    35         print('到达定义')
    36         get()                                   # 变量
    37         var.append(inputs[-1])
    38         get()
    39         if inputs[-1] == '等于':                # 赋值
    40             get()
    41             data.append(no[inputs[-1]])
    42         state = None                            # 结束
    43         continue
    44 
    45     if state == '运算':
    46         print('到达运算')
    47         get()
    48         if inputs[-1] == '减少':                #
    49             get()
    50             data[-1] = get_key(data[-1]-no[inputs[-1]])
    51         elif inputs[-1] == '增加':              #
    52             get()
    53             data[-1] = get_key(data[-1]+no[inputs[-1]])
    54         state = None
    55         continue
    56 
    57     if state == '看看':
    58         print('到达看看')
    59         get()
    60         if inputs[-1] in var:                   # 找值
    61             print(data[-1])
    62         state = None
    63         continue

     

     (附上运行)

    最新代码:

      1 no = {'': 0, '': 1, '': 2, '': 3, '': 4, '': 5, '': 6, '': 7, '': 8, '': 9, '': 10}  # 中文数目字
      2 inputs = []     # 输入流
      3 data = {}       # 数据流
      4 state = None    # 业务状态
      5 
      6 
      7 def get():
      8     # 用户输入流
      9     i = input().split(" ")
     10     inputs.append(i)
     11     # print(inputs)
     12 
     13 
     14 def get_key(v):
     15     for k, val in no.items():
     16         if v == val:
     17             return k
     18 
     19 
     20 while True:
     21     get()                                        # 输入存到数据流
     22 
     23     # 状态机
     24     if not state:
     25         cur = inputs[-1]                        # 最新输入流
     26         if cur[0] == '整数':
     27             state = '定义业务'
     28         elif cur[0] in list(data.keys()):
     29             state = '运算业务'
     30         elif cur[0] == '看看':
     31             state = '看看业务'
     32         elif cur[0] == '如果':
     33             state = '正则业务'
     34         elif cur[0] == '结束':
     35             exit()
     36         else:
     37             print("状态错误")
     38 
     39     if state == '定义业务':
     40         cur = inputs[-1]                        # 最新输入流
     41         key = cur[1]                            # 变量
     42         if cur[2] == '等于':                    # 赋值
     43             data[key] = no[cur[3]]
     44         else:
     45             print("定义错误")
     46         state = None                            # 业务结束
     47         print('定义业务完成')
     48         continue
     49 
     50     if state == '运算业务':
     51         cur = inputs[-1]                        # 最新输入流
     52         key = cur[0]
     53         if cur[1] == '减少':                    #
     54             data[key] = data[key] - no[cur[2]]
     55         elif cur[1] == '增加':                  #
     56             data[key] = data[key] + no[cur[2]]
     57         else:
     58             print("运算错误")
     59         state = None
     60         print('运算业务完成')
     61         continue
     62 
     63     if state == '看看业务':
     64         cur = inputs[-1]  # 最新输入流
     65         if cur[1] in list(data.keys()):                   # 找值
     66             key = cur[1]
     67             print(get_key(data[key]))
     68         else:
     69             print("变最错误")
     70         state = None
     71         print('看看业务完成')
     72         continue
     73 
     74     if state == '正则业务':
     75         cur = inputs[-1]                    # 最新输入流
     76         if cur[1] in list(data.keys()):     # 找值
     77             if cur[2] == '大于':            # 条件
     78                 condition = no[cur[3]]
     79             else:
     80                 print("条件错误")
     81 
     82             # 正条件
     83             if cur[4] == '' and data[cur[1]] > condition:
     84                 if cur[5] == '看看':
     85                     print(cur[6])
     86                 elif cur[6] == '增加' and cur[5] in list(data.keys()):
     87                     data[cur[5]] = data[cur[5]] + no[cur[7]]
     88                 elif cur[6] == '减少' and cur[5] in list(data.keys()):
     89                     data[cur[5]] = data[cur[5]] - no[cur[7]]
     90                 elif cur[5] == '' or cur[6] == '':
     91                     pass
     92                 else:
     93                     print('正条件错误')
     94             # 负条件
     95             elif (cur[7] == '否则' or cur[8] == '否则') and data[cur[1]] < condition:
     96                 if cur[8] == '看看':
     97                     print(cur[9])
     98                 elif cur[10] == '增加' and cur[9] in list(data.keys()):
     99                     data[cur[9]] = data[cur[9]] + no[cur[11]]
    100                 elif cur[10] == '减少' and cur[9] in list(data.keys()):
    101                     data[cur[9]] = data[cur[9]] - no[cur[11]]
    102                 elif cur[9] == '' or cur[10] == '':
    103                     pass
    104                 else:
    105                     print('负条件错误')
    106             else:
    107                 print("条件错误")
    108         else:
    109             print("变量错误")
    110         state = None
    111         print('正则业务完成')
    112         continue
  • 相关阅读:
    ExecuteScalar 返回值问题
    c#中怎么用for循环遍历DataTable中的数据
    select多用户之间通信
    python快速学习6
    python快速学习5
    python快速学习4
    python快速学习3
    python快速学习2
    arm处理器
    软链接与硬链接
  • 原文地址:https://www.cnblogs.com/Mangnolia/p/12268368.html
Copyright © 2011-2022 走看看