精华内容
参与话题
问答
  • Python中文解释器

    万次阅读 2020-02-03 22:51:52
    人类语言也是编成语言 作为人类表达方式的一种,任何语言都有共性,那就是表达人类的逻辑 人类的语言之大脑和编成语言之计算机 若上述是真理 那么有,一个对话相当一个方法 首先定义变量 me=“我” ...

    人类语言也是编成语言
    作为人类表达方式的一种,任何语言都有共性,那就是表达人类的逻辑
    人类的语言之大脑和编成语言之计算机

    若上述是真理

    那么有,一个对话相当一个方法

    首先定义变量
    me=“我”
    you=“你”
    she=“她”
    he=“它”

    上述变量是对象
    这些对象有某些行为方法属性
    人1说:我
    人2说:我
    人2说:我

    上面一段对话可以看到
    首先定义了三个对象
    s1=人1
    s2=人2
    s3=人3
    说(say)是s1,s2,s3 的属性
    s1.say(“我”)
    s2.say(“我”)
    s3.say(“我”)
    那么有了逻辑表达就要有
    解释器

    后面我会使用python写一个中文解释器
    就和python解释器一样,没有解释器语言是没有任何逻辑的,
    如一盘散沙,永远也该不起高楼

    先感慨一下
    人们过于的依赖神经网络,
    略调了思考事物的本质

    接着说

    将文本标注和编写成可以表达语气情感 链接上下文 ,可以被语音解释器解释为有感情的语音

    中文解释器

    主要包括:句号逗号识别,语气文字翻译识别,文字种类识别(例如旁白,环境描写,空间描写,等非人物行为的语句),语意解析

    句号逗号识别
    使用python检测即可,检测的文章多l就可以反向了 标注逗号句号分段等。

    标点符号识别
    只要讲标点符号写入一个字符列表即可实现
    中文标点符号详解
    https://wenku.baidu.com/view/37e4811d650e52ea551898a2.html
    在这里插入图片描述
    逻辑是这样的
    一句话代表一个类意思
    那么一句话基本就是两个标点符号之间的文字
    比如说 。和 。之间 ? 和问号之间,
    那么都有哪些表示一句话说完了 将其一一排列
    。 ? : ; !

    def chinese_punctuation(chinese):
        # 直接使用repl代替这些结束符号即可
        for one_punctuation in '。?:;!':
            if one_punctuation in chinese:
                chinese=chinese.replace(one_punctuation,"#")
        print(chinese.split("#"))
    
    if __name__ == '__main__':
        chinese_punctuation("""代词是指具有代替或指示人、事物作用的词。古代汉语的代词可以分为人称代词、指示代词、疑问代词、无定代词、特殊代词等五类。它们的主要作用是在句子中充当主语、宾语、定语或补语。""")
    
    #结果
    #['代词是指具有代替或指示人、事物作用的词', '古代汉语的代词可以分为人称代词、指示代词、疑问代词、无定代词、特殊代词等五类', '它们的主要作用是在句子中充当主语、宾语、定语或补语', '']
    
    

    识别出代词来
    你,我,他,它,这,那,哪,比喻等

    代词详解
    http://xh.5156edu.com/page/z2190m2907j18579.html
    一、现代汉语–代词

    人称代词

    你 我 他 它 她 俺 自己 你们 我们
    咱们 她们 他们 它们 俺们 大家      
    指示代词

    近指 这 这儿 这么 这里 这会儿 这样 这么样  
    远指 那 那边 那儿 那里 那样 那么 那会儿 那么样
    其它 每 各 某 另        
    疑问代词

    谁 哪 几 什么 怎么 哪里

    二、古代汉语–代词

    人称代词

    朕 我 吾 予 余 尔 女 汝 若
    而 乃 之 其 厥        
    指示代词

    是 之 此 斯 兹 彼 夫 其  
    疑问代词

    谁 孰 何 曷 奚 胡 恶 安 焉
    特殊代词

    者 所              
    现代汉语代词

    人称代词:你 我 他 它 咱们 大家 自己
    指示代词:这 那 这儿 那边 各 每
    疑问代词:谁 什么 哪 怎么 哪里 几

    代词一般是都可以从上一句找到,除了人称代词是自带属性的;
    人称代词 表示行为对象
    指示代词 行为对象的对象
    疑问代词 对象怀疑的某对象的行为

    一句话一定有说话对象和指示对象或者疑问对象
    指示对象和疑问对象一定出现在说话对象的上一时刻的或很久以前的聊天记录里面
    所以中途插入你不会知道指示对象是谁,亦不会知道疑问对象是谁

    所以人工智能,在接触人类时候一定要分出对象是谁,不知道的一定要问,这样才能了解自己的主人经常指示的对象或疑问的对象是谁,否则是无法与人真正意义上的沟通的

    比如你一般指的是指示对象
    你们指的是除了说话对象的所有对象
    他们指的是除说话对象的某一群人
    一个语言是以要以说话对象为中心去剖析

    找出代词

    # 返回代词及代词的位置
    def chinese_pronoun(chinese):
        chinese_dict = {"人称代词":
    
                            ['你',
                             '我',
                             '他',
                             '它',
                             '她',
                             '俺',
                             '自己',
                             '你们',
                             '我们',
                             '咱们',
                             '她们',
                             '他们',
                             '它们',
                             '俺们',
                             '大家'],
    
                        '指示代词':
    
                            ['近指',
                             '这',
                             '这儿',
                             '这么',
                             '这里',
                             '这会儿',
                             '这样',
                             '这么样',
                             '远指',
                             '那',
                             '那边',
                             '那儿',
                             '那里',
                             '那样',
                             '那么',
                             '那会儿',
                             '那么样',
                             '其它',
                             '每',
                             '各',
                             '某',
                             '另'],
                        '疑问代词':
    
                            ['谁',
                             '哪',
                             '几',
                             '什么',
                             '怎么',
                             '哪里']}
    
        one_value_list=[]
    
    #   首先找出什么代词;
        for key,value in chinese_dict.items():
            for one_value in value:
                if one_value in chinese:
                    print(one_value,chinese.count(one_value),key)
                    one_value_list.append(one_value)
    
    
        # 去单  长代词 才能富含短的所以先处理长的就能分出短的
        chinese_one=chinese
        chinese_set=sorted(list(set(one_value_list)),key=len,reverse=True)
        pronoun_index=0
        for one in chinese_set:
            if one not in chinese_one:
                chinese_set.remove(one)
    
            chinese_one=chinese_one.replace(one,"*{}*".format(pronoun_index))
            pronoun_index+=1
    
    
        print(chinese_one,chinese_set)
        
        # 返回代词及代词的位置
        return chinese_one,chinese_set
    
    

    对于聊天机器人来说记忆是重要的,提问也是重要的。提问后在回答才是最重要的。
    传统的神经网络带有记忆性但是 ,记忆的是文字并不是文字的片段,或者是有对象性的记忆,指示单纯的记忆某种状态,也就是说文字语言直接的转换为数字语言。
    某种状态的开启
    这是一种状态人类已知知的状态
    但是对于一个语言来说规律是固定的采取,神经网络始终是浪费的
    直接将规律写好就成。
    将一种语言的规律写好后,这样就可以直接学习语言所表达的知识了;
    对于大脑学习一个语言至少要几个月
    那么机器就要更久,所以直接使用人类写好更加的快捷方便
    神经网络要解决人类无法总结的关系

    语义分析
    中文分词

    可以参考
    https://blog.csdn.net/qq_33431368/article/details/92473779

    中文所有处理工具库包括资料库
    https://github.com/fighting41love/funNLP

    中文视频提取字幕后期会结合时间给出
    再结合视频提取声音得到语音文字的描述
    https://blog.csdn.net/XnCSD/article/details/89376477

    罐一囊乙露二霸十蠢丁灌厂魔七籍卜嚷人嚼入躁八耀九壤几疆儿爆了瓣力颤乃蹲刀攀又警三鹰于翻干镰亏蹦士覆工鞭土骤才翼寸臂下燥大糠丈糟与赢万辫上繁小穗口螺巾蹈山瞧千霞乞霜川藏亿鞠个擦勺戴久缴凡避及壁夕懒丸激么澡广燃亡糕门糖义辩之辨尸凝弓磨己雕已膨子衡卫邀也篮女赞飞镜刃默习赠叉器马蹄乡嘴丰餐王醒井融开整夫橘天颠无薄元薪专薯云燕扎操艺劈木慰五额支懂厅潮不潜太遵犬糊区毅历颜尤摩友熟匹膛车膝巨艘牙德屯僻比躺互僵切篇瓦箭止箱少稼日稿中黎冈稻贝靠内镇水墨见嘱午蝴牛蝶手踪毛踩气踏升踢长影仁瞎什暴片题仆瞒化霉仇震币醉仍醋仅飘斤橡爪樱反槽介横父蔬从蕉今鞋凶聪分增乏撤公撞仓播月撑氏趟勿趣欠撒风撕丹慧匀缩乌骡凤凳勾熊文翠六嫩方谱火蜜为察斗赛忆寨订慢计漏户演认滴心漫尺漂引漆丑熔巴熄孔歉队精办旗以端允竭予辣劝瘦双腐书遮幻膏玉豪刊敲示裹末馒未疑击鲜打膀巧膊正膜扑貌扒魄功鼻扔僚去管甘箩世算古稳节舞本锻术锹可赚丙蜘左蝇厉蜡右蜻石嗽布颗龙裳平弊灭需轧愿东磁卡酸北酿占酷业遭旧歌帅榨归榜且榴旦模目蔑叶暮甲慕申蔽叮聚电摔号摘田境由誓史截只摧央嘉兄撇叼墙叫璃另碧叨静叹缠四缝生叠失嫁禾嫌丘障付辟仗殿代群仙福们谨仪塞白誉仔慎他滩斥粱瓜滨乎滚丛溜令溪用滔甩滥印滤乐源句漠匆满册煌犯煤外慈处塑冬煎鸟数务粮包意饥韵主新市廉立痰闪酱兰解半触汁腿汇腾头腹汉腥宁腰穴遥它愈讨微写躲让像礼傻训催必鼠议舅讯毁记简永签司筹尼愁民稠出辞辽矮奶锯奴键加锦召锤皮锣边锡发错孕罩圣罪对置台嗓矛蜂纠蛾母遣幼跟丝路式跪刑跳动跨扛照寺暗吉歇扣盟考暖托愚老鄙执睬巩睡圾睛扩鉴扫龄地督扬输场雹耳雾共零芒雷亚碌芝碗朽碰朴碎机碑权碍过感臣酬再赖协概西楼压榆厌槐在想有楚百禁存献而蒸页蒙匠蓄夸蓬夺幕灰墓达蓝列鹊死勤成蒜夹摊轨塘邪搞划摇迈搬毕携至摆此鼓贞塌师搏尘填尖摸劣摄光肆当魂早瑞吐缘吓骗虫编曲缓团缎同登吊嫂吃絮因隙吸隔吗疏屿粥帆强岁屡回属岂谦刚谣则谢肉裙网裤年裕朱遍先窗丢窝舌窜竹富迁寒乔割伟慨传愉乒愧乓惰休慌伍愤伏溉优滋伐游延渡件湾任滑伤渴价温份湿华渣仰湖仿港伙焰伪曾自道血尊向粪似普后羡行善舟阔全童会痛杀就合蛮兆装企馋众然爷猴伞猾创鲁肌腔朵脾杂腊危禽旬释旨番负舒各艇名循多御争惩色街壮奥冲储冰傍庄焦庆集亦堡刘牌齐傅交傲次筝衣筋产答决筒充筛妄策闭筑问等闯筐羊税并稀关程米稍灯剩州鹅汗毯污智江短池锐汤锋忙锈兴锅宇锄守锁宅销字链安铺讲铸军黑许赔论赌农帽讽幅设喉访喘寻喂那喝迅蜓尽蛛导蛙异遗孙跑阵跌阳践收景阶喊阴遇防喇奸晶如喷妇量好最她暑妈晴戏掌羽赏观敞欢辉买紫红悲纤辈级雅约暂纪雄驰裂巡殖寿雁弄确麦硬形厦进厨戒逼吞惑远惠违棕运棚扶棉抚棍坛棵技椒坏椅扰森拒植找棋批棒扯葵址辜走朝抄落坝葱贡敬攻葡赤董折葛抓葬扮惹抢散孝联均欺抛期投斯坟揉抗握坑搅坊搂抖搁护裁壳援志煮扭搜块揪声插把喜报揭却博劫堤芽提花超芹趋芬趁苍越芳塔严搭芦堪劳款克替苏斑杆琴杠绿杜绸材绵村维杏绳极骑李续杨绪求绩更颈束婶豆婚两隐丽隆医蛋辰随励弹否屠还敢歼逮来谜连祸步谎坚谋旱密盯窑呈宿时寄吴寇助惯县惨里惊呆惕园惧旷悼围惭呀惜吨情足渗邮梁男婆困深吵淡串液员淘听渔吩混吹渐呜渠吧淹吼淋别添岗清帐兽财剪针断钉粒告粗我粘乱盖利着秃率秀望私旋每族兵商估竟体章何盗但鹿伸庸作康伯廊伶痕佣痒低麻你毫住减位凑伴馆身馅皂猛佛猫近猎彻猪役猜返够余象希脱坐脸谷脖妥脚含领邻彩岔欲肝悉肚鸽肠盒龟斜免船狂盘犹衔角得删假条偏卵停岛售迎您饭偷饮偶系偿言悠冻袋状做亩敏况第床符库笛疗笼应笨冷移这犁序梨辛甜弃银冶铲忘铜闲圈间崇闷崭判崖灶唯灿患弟唱汪累沙蛇汽略沃跃泛距沟啄没晚沈啦沉野怀悬忧眼快眯完睁宋晨宏匙牢常究堂穷雀灾虚良辆证辅启雪评盛补袭初聋社爽识戚诉票诊副词救译桶君梯灵梳即检层梅尿梢尾梦迟械局营改菠张萍忌菊际萄陆菜阿菌陈萝阻萌附黄妙勒妖著妨基努职忍掘劲据鸡探驱控纯接纱培纳掠纲掏驳教纵授纷掀纸推纹堆纺掉驴排纽捷奉掩玩域环描武堵青捧责理现球表继规验抹绣拢绢拔桑拣预担难坦能押通抽娘拐娱拖陪拍陷者陶顶陵拆弱拥屑抵剧拘展势恳抱剥垃谊拉谈拦谅拌冤幸调招谁坡课披祥拨被择袍抬袖其袜取扇苦读若诸茂朗苹请苗案英宰范容直窄茄宾茎宴茅宵林家枝宽杯害柜悦析悔板悄松悟枪涌构烫杰涨述浸枕浪丧润或流画浮卧浴事涂刺海枣浩雨消卖涉矿酒码涝厕浙奔涛奇递奋烟态烛欧烧垄烦妻烘轰烤顷兼转益斩料轮粉软拳到瓶非羞叔阅肯畜齿旅些旁虎部虏竞肾剖贤站尚凉旺资具唐果离味效昆疲国疼昌疾畅病明症易脊昂座典准固席忠高咐衰呼浆鸣桨咏恋呢饿岸皱岩留帖逢罗狼帜狸岭脑凯胶败脏贩胳购胸图脂钓脆制翁知颂垂爱牧爹物拿乖途刮航秆般和舱季舰委徐佳徒侍息供躬使射例臭版健侄倦侦倍侧俯凭候侨倡佩俱货倘依倒的倾迫倚质值欣借征债往笋爬笑彼笔径透所秘舍称金秩命秧斧积爸租采秤受敌乳乘贪造念牺贫特肤氧肺缺肢铅肿铃胀铁朋钻股钳肥钱服贿胁贼周圆昏峰鱼罢兔唉狐啊忽唤狗恩备哭饰哨饱蚊饲晕变晌京晃享鸭店晓夜眠庙晒府党底紧剂监郊虑废桌净柴盲致放毙刻顿育较闸轿闹顾郑殊券烈卷逐单套炒原炊破炕础炎夏炉唇沫辱浅翅法配泄栗河逗沾速泪哥油索泊根沿样泡核注校泻格泳桃泥桥沸株波桐泼档泽桂治框怖真性恶怕晋怜获怪荷学莫宝莲宗恭定耽宜耻审挨宙壶官恐空热帘挽实换试捡郎逝诗哲肩都房损诚捐衬捆衫捉视埋话捏诞捎询盐该起详赶建载肃振录捕隶栽居捞届匪刷盏屈顽弦蚕承素孟班孤珠陕泰降艳限耗妹耕姑统姐绞姓绝始骆驾络参给艰绘线骄练绕组结细绒驶绑织垒终柔驻怠驼勇绍盈经贺贯架奏怒春娇帮姻珍姨玻姥毒娃型院挂险封除持孩项眉垮陡挎费城昼挠屋政既赴退赵垦挡诵挺说括诱拴误拾祝挑神指祖垫袄挣扁挤语拼冠挖客按窃挥穿挪突某宪甚宫革室荐宣巷觉带举草恨茧恼茶恰荒恢茫恒荡津荣浓故浑胡洲南洋药济标染枯洽柄派栋活相洗查测柏洞柳浊柱浇柿洒栏洪树洁要剃咸烂威炮歪炸研炼砖总厘逆厚首砌前砍迷面类耐送耍叛牵姜残美殃养轻差鸦阁皆阀背闻战施点帝临音览亲竖姿省疤削疫尝疯是疮盼庭眨迹哄度显亮哑亭冒哀映奖星将昨弯畏饼趴饺胃蚀贵饶界急虹怨虾贸蚁狠思狱蚂狡虽独品狮咽狭骂勉哗脉咱胖响胞哈胜咬胆咳盆哪食炭逃峡剑罚叙贱须贴很骨律钞待钟盾钢俊钥追钩侵卸鬼缸泉拜皇看信矩俘怎俗牲俭选侮适促秒保香修种顺秋贷科俩重便复段竿"

    展开全文
  • 1.pycharm选择python解释器;2.pycharm配置环境变量

    【环境搭建】pycharm选择python解释器,pycharm配置环境变量

    pycharm选择python解释器

    File → Settings → Project → Project Interpreter

    点击向下的箭头后点击Show All
    图1
    点击加号添加python解释器
    图2
    左侧边栏选择虚拟环境或使用系统的python解释器
    图3

    pycharm配置环境变量

    Run → Edit Configurations

    点击加号添加
    图4
    选择Python
    图5
    Script path 是选择哪个Python脚本使用这些环境变量配置
    Environment variables 是具体的环境变量配置内容
    Python interpreter 选择pycharm选用的python解释器
    图6
    Environment variables设置:左边是环境变量名,右边是环境变量值
    图7

    结语

    如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
    手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

    展开全文
  • Python学习教程(Python学习路线):手把手教你Sublime Text编辑器配置Python解释器 前天有同学问我一个关于 Sublime text 配置 Python 解释器的问题,想使用快捷键但是徒劳一场,因为缺少 Python 解释器,直接按下...

    Python学习教程(Python学习路线):手把手教你Sublime Text编辑器配置Python解释器

    前天有同学问我一个关于 Sublime text 配置 Python 解释器的问题,想使用快捷键但是徒劳一场,因为缺少 Python 解释器,直接按下快捷键 Ctrl+B 是不会得到想要的结果的。 鉴于此,如果有伙伴想使用 Sublime 跑 Python 程序的话,那么配置 Python 解释器是必不可少的一步,里整理的这篇手把手教程(真的是手把手了),希望为后来者铺砖引路。下面是详细教程:

    1 、首先打开 Sublime ,如下图所示,然后选择“ Preferences ”选项卡。
    在这里插入图片描述
    2 、点击第一个选项“ Browse Packages… ”,然后系统会自动定位到 Sublime 的安装包目录。
    在这里插入图片描述
    3 、然后会弹出下图的文件夹界面。
    在这里插入图片描述
    4 、在这堆文件夹中找到 Python 这个文件夹,如下图所示,然后进入该文件夹,找到 Python.sublime-build 这个文件。
    在这里插入图片描述
    5 、在 Sublime 中打开该文件,如下图所示。
    在这里插入图片描述
    {
    “cmd”:[“python.exe”,"-u", “$file”],

    "path":"C:\\Python34",
     
    "file_regex": "^[ ]*File\"(...*?)\", line ([0-9]*)",
     
    "encoding": "gbk",
     
    "selector": "source.python"
    }
    

    图片中显示的内容是我更新之后的内容,原始内容没有这么丰富。主要是更改两个地方,其一是添加 Python 解释器路径,其二是添加编码部分,一般选择的编码是 utf-8 或者 gbk ,也有的是用 cp936 的,主要是防止 Sublime Text 报 [Decode error - output not utf-8] 的错误。一般的,如果我们不设置编码的话,一旦输出除英文之外的其他的语言,就会出现编码问题,一个让人脑壳疼的问题,一般情况下几种编码多尝试一下问题都不大。
    6 、更改完 Python.sublime-build 文件之后,按下快捷键 Ctrl+S 进行保存即可。之后任意打开一个 Python 文件,然后在 Sublime 中依次点击选项卡 Tools à Build System à Python ,如下图所示,整个过程相当于完成了 Sublime 与 Python 解释器的完美“联结”。
    在这里插入图片描述
    7 、现在可以通过快捷键 Ctrl+B 或者依次添加选项卡 Tools à Build ,如下图所示,之后就可以运行当前 Python 文件了,效果如下图所示。文件的输出部分在 Sublime 的下方,一般的是呈现出灰色的一个长方形部分。
    在这里插入图片描述
    8 、至此,关于 Sublime 中配置 Python 解释器和 [Decode error - output not utf-8] 报错的问题已经基本顺利解决了。

    小伙伴再次碰到该问题的时候,就可以少走弯路啦。虽然目前用的是 Sublime Text 2 ,不过 Sublime Text 3 的配置方法与 Sublime Text 2 如出一辙,不再赘述。

    展开全文
  • 解释器模式属于行为型模式,给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 解释器模式提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口...

    解释器模式(Interpreter Pattern)

    解释器模式属于行为型模式,给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

    解释器模式提供了评估语言的语法或表达式的方式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被广泛地应用在 SQL 解析、符号处理引擎等领域。

    角色

    1、抽象表达式(Expression)

    声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口一般是一个Interpret()方法,称做解释操作;

    2、终结符表达式(Terminal Expression)

    实现了抽象表达式角色所要求的接口,一般是Interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式;

    3、非终结符表达式(Nonterminal Expression)

    文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,“+就是非终结符,解析“+”的解释器就是一个非终结符表达式;

    4、环境(Context)

    这个角色的任务一般是用来存放文法中各个终结符所对应的具体值,比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。

    示例

    在这里插入图片描述
    命名空间InterpreterPattern中包含IWord抽象表达式接口,4个终结符表达式和1个非终结符表达式,Instruction类代表1条完整的指令,Semicolon类分隔左右两边的指令,Interpreter类充当环境类以构建表达式树并调用抽象表达式接口的解释方法Interpret。本案例尝试通过控制一次飞机的起飞至降落的过程来讲述解释器模式的使用方法。以下是我们要解释的指令:

    340.00 10.00 taxing 1.00;
    27.00 120.00 takeoff 1.00;
    90.00 350.00 fly 30.00;
    180.00 400.00 cruise 230.00;
    50.00 320.00 fly 20.00;
    320.00 110.00 landing 3.00;
    120.00 10.00 taxing 3.00;
    

    以上是我们要解释的所有7条指令,所有指令在同一行上,分号后是没有换行的,因为文章排版需要加了换行。以第1行为例解释每个参数的含义。340.00代表航向,10.00代表空速,taxing代表飞机的运动类型,1.00代表航程。

    public interface IWord {
    
        string Interpret();
    
    }
    

    定义抽象表达式接口IWord,包含一个Interpret方法。

    public sealed class Course : IWord {
     
        private double _course = 0;
     
        public Course(double course) {
            this._course = course;
        }
     
        public string Interpret() {
            return $"heading:{_course}°,";
        }
     
    }
    

    航向解释类Course,终结符表达式。

    public sealed class Speed : IWord {
    
        private double _speed = 0;
    
        public Speed(double speed) {
            this._speed = speed;
        }
    
        public string Interpret() {
            return "speed:" + _speed.ToString() + "kn,";
        }
    
    }
    

    空速解释类Speed,终结符表达式。

    public sealed class Movement : IWord {
    
        private string _movement = String.Empty;
    
        public Movement(string movement) {
            this._movement = movement;
        }
    
        private Dictionary<string, string> _movements = new Dictionary<string, string> {
            {"taxing","taxing on the runway"},
            {"takeoff","take off from the runway"},
            {"fly","flying in the sky"},
            {"cruise","navigate a cruise"},
            {"landing","landing on the runway"},
        };
    
        public string Interpret() {
            return "movement:" + _movements[_movement] + ",";
        }
    
    }
    

    运动解释类Movement,终结符表达式。

    public sealed class Voyage : IWord {
    
        private double _voyage = 0;
    
        public Voyage(double voyage) {
            this._voyage = voyage;
        }
    
        public string Interpret() {
            return "voyage:" + _voyage.ToString() + "km.";
        }
    
    }
    

    航程解释类Voyage,终结符表达式。

    public sealed class Semicolon : IWord {
    
        private IWord _left = null;
        private IWord _right = null;
    
        public Semicolon(IWord left, IWord right) {
            this._left = left;
            this._right = right;
        }
    
        public string Interpret() {
            return _left.Interpret() + Environment.NewLine + _right.Interpret();
        }
    
    }
    

    分号解释类Semicolon,非终结符表达式。

    public sealed class Instruction : IWord {
    
        private IWord _course = null;
        private IWord _speed = null;
        private IWord _movement = null;
        private IWord _voyage = null;
    
        public Instruction(IWord course, IWord speed, IWord movement, IWord voyage) {
            this._course = course;
            this._speed = speed;
            this._movement = movement;
            this._voyage = voyage;
        }
    
        public string Interpret() {
            return _course.Interpret() +
                          _speed.Interpret() +
                          _movement.Interpret() +
                          _voyage.Interpret();
        }
    
    }
    

    由非终结符表达式分隔开的所有终结符表达式构成一条完整的指令Instruction类,这个类包含一个解释方法Interpret。

    public class Interpreter {
    
        private IWord _word = null;
    
        private Instruction _instruction = null;
    
        public string Interpret(string instruction) {
            string[] instrucs = instruction.Split(';');
    
            foreach(var word in instrucs) {
                if(word.Trim() == "") break;
                string[] words = word.Split(' ');
    
                _instruction = new Instruction(new Course(double.Parse(words[0])),
                                               new Speed(double.Parse(words[1])),
                                               new Movement(words[2]),
                                               new Voyage(double.Parse(words[3])));
    
                if(_word == null) {
                    _word = _instruction;
                } else {
                    _word = new Semicolon(_word, _instruction);
                }
            }
    
            return _word.Interpret();
        }
    
    }
    

    解释类Interpreter,充当环境类,此类最终构建一个表达式树并完成所有指令的解释动作。

    public class Program {
    
        private static Interpreter _interpreter = new Interpreter();
    
        public static void Main(string[] args) {
            string instruction = "340.00 10.00 taxing 1.00;" +
                "27.00 120.00 takeoff 1.00;" +
                "90.00 350.00 fly 30.00;" +
                "180.00 400.00 cruise 230.00;" +
                "50.00 320.00 fly 20.00;" +
                "320.00 110.00 landing 3.00;"+
                "120.00 10.00 taxing 3.00;";
    
            Console.WriteLine(_interpreter.Interpret(instruction));
            Console.ReadKey();
        }
    
    }
    

    以上是调用方的代码,以下是这个案例的输出结果:

    heading:340°,speed:10kn,movement:taxing on the runway,voyage:1km.
    heading:27°,speed:120kn,movement:take off from the runway,voyage:1km.
    heading:90°,speed:350kn,movement:flying in the sky,voyage:30km.
    heading:180°,speed:400kn,movement:navigate a cruise,voyage:230km.
    heading:50°,speed:320kn,movement:flying in the sky,voyage:20km.
    heading:320°,speed:110kn,movement:landing on the runway,voyage:3km.
    heading:120°,speed:10kn,movement:taxing on the runway,voyage:3km.
    

    优点

    1、可扩展性比较好、灵活;
    2、增加了新的解释表达式的方式;
    3、易于实现简单文法。

    缺点

    1、可利用场景比较少;
    2、对于复杂的文法比较难维护;
    3、解释器模式会引起类膨胀;
    4、解释器模式采用递归调用方法。

    使用场景

    1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树;
    2、一些重复出现的问题可以用一种简单的语言来进行表达;
    3、一个简单语法需要解释的场景。

    展开全文
  • PyCharm 是一款功能强大的 Python 编辑,具有跨平台性,目前PyCharm 安装使用教程网上很多,但针对最新版的较少,有稍许出入,所以小编来介绍一下 PyCharm 在 Windows系统下下载、安装以及使用教程的。结合...
  • pypy解释器提高python的效率之安装pypy

    万次阅读 2019-05-13 17:45:26
    https://blog.csdn.net/weixin_39121325/article/details/88655370
  • pycharm无法创建解释器

    2019-05-03 20:05:09
    求问,我安装的anaconda3和anaconda2,按照网上anaconda2和3兼容的教程安装的,让anaconda2作为单独的环境,然后用pycharm作为IDE,在pycharm里面插入解释器的时候,用anaconda2的python没问题,但是用anaconda3的...
  • 解释器模式

    千次阅读 2019-09-25 20:28:33
    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 介绍 意图:...
  • 全栈工程师开发手册 (作者:陈玓玏) python教程全解 白手起家,从头开启python的开发环境搭建。 一. 如何安装Python 在https://www.python.org/下载安装包。 下载下来一个exe文件,直接...找...
  • 解释器原理

    千次阅读 2012-08-03 16:13:24
    文字解码完后,你可以想象有一条纸带,上面写着代码。从左侧向左拉动纸带,用剪刀将程序 纸带剪成纸片,在内存中依次摆放这些纸片,然后才可以执行内存中的这些纸片。     执行内存中代码的时侯,会用到一种名...
  • JAVA设计模式--解释器模式

    万次阅读 2017-02-25 14:51:01
    目录 一、什么是解释器模式 ...给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 所谓“语言”,指的是使用规定格式和文法的一类字符组合。 ...
  • 一 概述 1-1 知识储备 1-2 成果展示 二 移植过程 2-1 代码选型 2-2 启动代码实现 2-3 指令集兼容 4 修改内存分布 5 交互界面 三 总结与展望 一 概述micropython:介绍与编译 一文介绍了Micropython的语法特点,当前的...
  • Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释器: CPython当从Python...
  • 指定脚本解释器

    2017-07-29 10:32:41
    以下是我常用的 指定 脚本解释器 的方式 command official annotations personal annotations #!/bin/bash 执行时,调用 /bin 下的 bash 解释器 #!/usr/bin/python 执行时,调用 /usr/bin 下的 python 解释...
  • 给pycharm的一个project的解释器,指向了一个 conda enviroment。 那么,这个工程里,我想添加一些package,要怎么操作呢? 在pycharm里,+ 号 是不起作用了。 那要怎么办? ![图片说明]...
  • Python安装解释器Pycharm解释器安装

    千次阅读 2019-11-12 13:39:47
    链接:python-3.8.0-amd64.exe 提取码:vgou 1):双击打开程序勾选Install后点击Customize installaton 默认下一步 修改安装地址 安装完成close 配置环境变量找到path编辑添加安装地址 打开cmd,输入python ......
  • Python语言编译器与解释器

    千次阅读 2018-10-20 17:02:35
    一、解释型语言Python Python语言是一种解释型、面向对象、动态数据类型的高级程序设计语言。 编译型语言 先整体编译,再执行 运行速度快,任意改动需重新编译 可脱离编译环境运行 ...这个解释器是用C语...
  • C++ 编写一个解释器

    千次阅读 2019-11-21 20:12:02
    前言 一直想知道如何编写一门脚本语言,现在终于有机会实现了。非常感谢 Thorsten Ball 的大作:Writing An Interpreter In Go 帮助我实现了这个想法! ... 可能你比较好奇为啥这个项目叫 Autumn...
  • Python解释器

    千次阅读 2019-05-22 10:25:58
    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站....
  • Scala解释器

    千次阅读 2020-03-26 21:16:12
    Scala解释器 后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代码,马上就可以让我们看到执行结果,用来测试比较方便。 启动scala解释器 要启动scala解释器,只需要以下几步:...
  • python解释器

    千次阅读 2018-07-24 09:11:25
    python解释器 标签(空格分隔): python 在阅读TensorFlow源代码时,经常看到解释器这样的一类的东西,打算将这部分知识梳理一下,方便自己后面继续看代码,该部分主要参考这两个博客Python中的解释器、python...
  • 设计模式——解释器模式

    千次阅读 2018-04-08 08:08:48
    解释器模式顾名思义,就是给定句子和文法,然后进行解释的一种设计模式。是一种应用很少的模式,涉及到文法、语义等东西,没有基础很不好理解,更容易把设计的模式变得一坨一坨的,不容易维护更不容易理解。解释器...

空空如也

1 2 3 4 5 ... 20
收藏数 74,603
精华内容 29,841
热门标签
关键字:

解释器