天道酬勤,学无止境

是否可以使用 fparsec 解析“off-side”(基于缩进的)语言?(Is possible to parse “off-side” (indentation-based) languages with fparsec?)

问题

我希望将 FParsec 用于类似 python 的语言,基于缩进。

我知道这必须在词法分析阶段完成,但 FParsec 没有词法分析阶段。 是否可以使用 FParsec,或者,如何在词法分析后提供它?

PD:我是 F# 新手,但对其他语言有经验

回答1

是的,这是可能的。

这是 FParsec 作者的一篇相关文章。 如果你想更深入地研究这个主题,这篇论文可能值得一读。 论文指出,有多个基于Parsec的缩进感知解析包,Parsec是启发FParsec的解析器组合器。

FParsec 没有单独的词法分析阶段,而是将词法分析和解析融合到一个阶段。 与解析器生成器 (fslex/fsyacc) 相比,IMO 缩进感知解析更适合使用解析器组合器 (FParsec) 完成。 原因是您需要手动跟踪当前缩进并根据上下文报告良好的错误消息。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 您将如何实施越位规则?(How would you go about implementing off-side rule?)
    问题 我已经编写了可以完成此技巧的生成器,但是我想知道实现越位规则的最佳方法。 简短地说:越位规则在这种情况下意味着缩进被识别为语法元素。 这是伪代码中的越位规则,用于使令牌化程序捕获可用形式的缩进,我不想按语言来限制答案: token NEWLINE matches r"\n\ *" increase line count pick up and store the indentation level remember to also record the current level of parenthesis procedure layout tokens level = stack of indentation levels push 0 to level last_newline = none per each token if it is NEWLINE put it to last_newline and get next token if last_newline contains something extract new_level and parenthesis_count from last_newline - if newline was inside parentheses, do nothing - if new_level > level.top
  • Is possible to parse “off-side” (indentation-based) languages with fparsec?
    I wish to use FParsec for a python-like language, indentation-based. I understand that this must be done in the lexing phase, but FParsec don't have a lexing phase. Is possible to use FParsec, or, how can feed it after lexing? P.D: I'm new at F#, but experienced in other languages
  • 如何在 FParsec 中添加解析数必须满足的条件?(How to add a condition that a parsed number must satisfy in FParsec?)
    问题 我正在尝试使用 FParsec 解析 int32,但有一个额外的限制,即该数字必须小于某个最大值。 他们是一种在不编写我自己的自定义解析器(如下)和/或我的自定义解析器(如下)的情况下执行此操作的方法是否是实现要求的适当方式。 我问是因为大多数内置库函数似乎都围绕满足某些谓词的字符而不是任何其他类型。 let pRow: Parser<int> = let error = messageError ("int parsed larger than maxRows") let mutable res = Reply(Error, error) fun stream -> let reply = pint32 stream if reply.Status = Ok && reply.Result <= 1000000 then res <- reply res 更新 下面是根据下面评论中给出的方向尝试更合适的 FParsec 解决方案: let pRow2: Parser<int> = pint32 >>= (fun x -> if x <= 1048576 then (preturn x) else fail "int parsed larger than maxRows") 这是正确的方法吗? 回答1 你做了一项出色的研究,几乎回答了你自己的问题。 一般来说,有两种方法:
  • 世纪之战:Python和Java,到底学哪个更好?
    零基础自学java,点击了解:https://how2j.cn本文章转载自(如有侵权联系我删除):微信公众号Java技术栈有人曾经将编程比作做菜,那编程语言就是首先要准备的食材或厨具。 尽管在刚开始开发AI时,有很多编程语言都可以满足你的需求,但没有一种编程语言是可以一站式解决AI编程的问题,因为在每一个项目中,不同的目标需要特定的方法。 和做菜时的精挑细选一样,在成为一个「高手」的过程中,我们要学会的是找到最适合自己的编程语言。 今天让我们来比较一下世界上两种最受欢迎、最强大的编程语言:Python和Java! 到底学Python还是Java,这确实是个难题。如果你问Python程序员,一定会告诉你先学Python;如果你问Java程序员,一定会告诉你先学Java。 Python人工智能热,据说前景好、薪资高。 Java老大哥,地位屈指可数,就业空间大,上升空间高。 这让人咋选呢?!这个世纪之问,可把一些选择困难症的小伙伴难倒了。 ❶ Python:简单易学、数据分析能力强 早在2017年,Python就已荣登编程语言首位,如今它已经不是一个毛头小子,而是可以与Java、C++媲美的语言了。 Python是一种面向对象的解释型计算机程序设计语言,具有丰富强大的库,常被称为胶水语言,能够把其他语言制作的各种模块轻松链接在一起。 因此Python具有:简单易学、数据分析能力强的特点。
  • F#开源项目[关闭](F# open source projects [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在寻找一些开放源代码的F#项目以供学习。 不是片段,而是完整的项目,可以很好地代表F#功能(例如,模式匹配,有区别的联合等)。 我的目标主要是从功能角度看所有功能如何组合在一起,项目的组织方式以及如何解决问题。 回答1 开源F#项目列表(已编译): 通过.NET集成Autocad的F#中的数学应用程序游戏开发教程 FsUnit Storm(用于测试Web服务的工具) FParsec-F#分析器组合器库下载股票价格-用F#编写 Truskill-Xbox Live Player评分器(用F#编写) F#集体智能实施 NDjango的 BistroFS-F#Web框架 VsVim-Visual Studio的Vim仿真 回答2 FsCheck,一个基于规范的测试框架。 VCC,C程序的静态分析(由MS研究) VSLab,Visual Studio中类似于Mathematica / matlab的环境 回答3 找到了另一个: Storm:用于测试Web服务的工具 回答4 BistroFS-F#的Web框架 回答5 Frack(功能性机架
  • C# 有(直接)flex/yacc 端口吗? 或者人们对 C# 使用什么词法分析器/解析器? [关闭](Does C# have (direct) flex/yacc port? Or what lexer/parser people use for C#? [closed])
    问题 就目前而言,这个问题不适合我们的问答形式。 我们希望答案得到事实、参考或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。 如果您认为此问题可以改进并可能重新打开,请访问帮助中心以获取指导。 8 年前关闭。 我可能是错的,但到目前为止,C#/.NET 似乎没有直接的 flex/bison (lex/yacc) 端口。 对于LALR解析器,我找到了GPPG/GPLEX,对于LL解析器,有著名的ANTLR。 但是,我想尽可能多地重用我的 flex/bison 语法。 C# 是否有任何直接的 flex/bison 端口? 人们通常为 C# 使用什么词法分析器/解析器? 这种选择有什么理由吗? 回答1 我认为你最好的选择是 GPLEX/GPPG,它是我所知道的最接近 Yacc/Lex for C# 的东西,无论如何你都需要将你的动作移植到 C# 中。 我还使用过 Coco/R、ANTLR(当然),最近还玩过 Irony.net、fslex/fsyacc (F#) 和 fparsec (F#)。 这里有一些链接 解析度 可可/R 反讽网 花园点解析器生成器 花园点莱克斯 我没有使用一个与另一个的技术原因:我玩这些主要是为了好玩。 很多年前,我确实为工作项目创建了一些 DSL,但我在这些项目上手动滚动了扫描器/解析器(当时我主要在 Pascal 中工作,我发现 TP Lex
  • 你会如何解析缩进(python 风格)?(How would you parse indentation (python style)?)
    问题 您将如何定义解析器和词法分析器规则来解析使用缩进来定义范围的语言。 我已经用谷歌搜索并找到了一种通过在词法分析器中生成 INDENT 和 DEDENT 标记来解析它的聪明方法。 如果我遇到一些有趣的事情,我会更深入地研究这个问题并发布答案,但我希望看到解决这个问题的其他方法。 编辑:正如查理指出的那样,如果不相同,已经有另一个非常相似的线程。 我的帖子应该被删除吗? 回答1 这是一种假设,因为它取决于您的词法分析器和解析器拥有什么技术,但最简单的方法似乎是拥有类似于 C 中的大括号的 BEGINBLOCK 和 ENDBLOCK 标记。使用您的词法分析器需要的“越位规则”跟踪一堆缩进级别。 当缩进级别增加时,为解析器发出一个 BEGINBLOCK; 当缩进级别降低时,发出 ENDBLOCK 并从堆栈中弹出级别。 这是关于 SO 的另一个讨论,顺便说一句。 回答2 您还可以在词法分析器中的某处跟踪第一行前面有多少标识项并将其传递给解析器。 最有趣的部分是尝试将其正确传递给解析器:) 如果您的解析器使用前瞻(这里我的意思是解析器可能会在它真正匹配一个标记之前查询可变数量的标记)然后尝试通过一个全局变量传递它似乎这是一个非常糟糕的主意(因为词法分析器可以在下一行滑动并在解析器仍在尝试解析上一行时更改缩进计数器的值)。 在许多其他情况下,全局变量也是邪恶的;)
  • FParsec:如何组合解析器以便它们以任意顺序匹配(FParsec: how to combine parsers so that they will be matched in arbitrary order)
    问题 任务是找到特定的键值对并解析它们。 这些对可以以任何顺序出现。 我的部分工作尝试: open FParsec type Parser<'a> = Parser<'a, unit> type Status = Running | Done type Job = { Id: int Status: Status Count: int } let ws = spaces let jobId: Parser<int> = ws >>. skipStringCI "Job id" >>. ws >>. skipChar '=' >>. ws >>. pint32 let status: Parser<Status> = ws >>. skipStringCI "Status" >>. ws >>. skipChar '=' >>. ws >>. ( (skipStringCI "Running" >>% Running) <|> (skipStringCI "Done" >>% Done)) let count: Parser<int> = ws >>. skipStringCI "Count" >>. ws >>. skipChar '=' >>. ws >>. pint32 let parse: Parser<Job> = parse { do
  • 我不能在Python中使用花括号吗?(Is it true that I can't use curly braces in Python?)
    问题 我读到的内容是,Python通过缩进而不是使用花括号来完成所有的“代码块”。 是对的吗? 因此,函数,if和类似的东西都没有用大括号括起来而出现了吗? 回答1 您可以尝试使用将来的import语句添加对花括号的支持,但尚不支持,因此会出现语法错误: >>> from __future__ import braces File "<stdin>", line 1 SyntaxError: not a chance 回答2 更正代码块。 但是,您确实使用花括号在Python中定义了字典: a_dict = { 'key': 'value', } 啊。 回答3 是的。 不使用大括号。 而是使用:符号引入新的块,如下所示: if True: do_something() something_else() else: something() 回答4 带括号的Python是python的一种变体,可让您精确地做到这一点。 这是我最近与朋友一起进行的一个项目。 回答5 是的 :) 而且(通常)4个空格和一个制表符之间是有区别的,因此请确保对用法进行标准化。 回答6 使用Whyton: http://writeonly.wordpress.com/2010/04/01/whython-python-for-people-who-hate-whitespace/ 回答7 是的。 if True
  • F#、FParsec 和递归调用流解析器(F#, FParsec, and Calling a Stream Parser Recursively)
    问题 我正在使用 F# 和 FParsec 开发一个多部分 MIME 解析器。 我正在迭代开发,所以这是高度未完善的、脆弱的代码——它只解决了我的第一个直接问题。 红色,绿色,重构。 我需要解析一个流而不是一个字符串,这真的让我陷入了循环。 鉴于这种限制,据我所知,我需要递归调用解析器。 如何做到这一点超出了我的能力范围,至少以我目前的做法是这样。 namespace MultipartMIMEParser open FParsec open System.IO type private Post = { contentType : string ; boundary : string ; subtype : string ; content : string } type MParser (s:Stream) = let ($) f x = f x let ascii = System.Text.Encoding.ASCII let str cs = System.String.Concat (cs:char list) let q = "\"" let qP = pstring q let pSemicolon = pstring ";" let manyNoDoubleQuote = many $ noneOf q let enquoted = between qP qP
  • 智能缩进算法文档?(Smart Indent algorithm documentation?)
    问题 我非常喜欢记录 IDE 功能的正确行为,这些功能对编码流程有微妙但显着的影响 - 诸如自动完成选择和注释/取消注释代码之类的事情,您可能没有意识到自己在利用,但在最后一天你完成的工作比你可能做的多一点。 我这样做是希望我必须使用的其他语言服务包含这些功能,从而改善我的日常编码生活。 “真正的”智能缩进,即 Visual Studio 2008 C# 编辑器,就是这些功能之一。 基本的块代码缩进相当简单,可以在合理的时间内组合在一起以完成工作。 另一方面,True Smart Indent 很可能是迄今为止我必须在 IDE 中实现的最具技术挑战性的任务,并且我已经实现了我的公平份额。 即使是完全成熟的即时自动代码重新格式化也更容易; 它只是遵循 Smart Indent 来完成繁重的工作。 我正在寻找通用智能缩进算法的高级讨论。 特别是,我正在寻找关于智能缩进策略的研究,或者对所有正常和“边缘”案例的客观描述,这些案例可以被测试以确保可重复的、无错误的结果。 最后,我想提供功能的详细工作流程、实际实现该功能的具体基础,并最终从中组装特定于语言的版本并将其集成到我的语言服务中。 PS:Visual Studio 2010 的 C# 编辑器在此功能中有几个小错误。 自己实施后,我对打磨它所需的工作有了全新的尊重。 编辑(8/25)
  • F#、FParsec 和递归调用流解析器,第二次尝试(F#, FParsec, and Calling a Stream Parser Recursively, Second Take)
    问题 感谢您对我关于这个项目的第一篇文章和第二篇文章的回复。 这个问题与第一个问题基本相同,但根据收到的关于这两个问题的反馈更新了我的代码。 我如何递归调用我的解析器? 我正在挠头,茫然地盯着代码。 我不知道从这里去哪里。 那是我转向stackoverflow的时候。 我在代码注释中包含了我收到的编译时错误。 一个绊脚石可能是我受歧视的工会。 我与受歧视的工会合作不多,所以我可能会错误地使用我的工会。 我正在使用的示例 POST,我在前两个问题中已经包含了其中的一些内容,它由一个边界组成,其中包含一个带有新边界的第二个帖子。 第二个帖子包括由第二个边界分隔的几个附加部分。 这几个附加部分中的每一个都是一个由标题和 XML 组成的新帖子。 我在这个项目中的目标是构建一个要在我们的 C# 解决方案中使用的库,该库接收一个流并返回递归地解析为标头和部分的 POST。 我真的希望 F# 在这里大放异彩。 namespace MultipartMIMEParser open FParsec open System.IO type Header = { name : string ; value : string ; addl : (string * string) list option } type Content = Content of string | Post of Post
  • YAML和JSON有什么区别?(What is the difference between YAML and JSON?)
    问题 YAML和JSON有什么区别,特别考虑以下几点? 性能(编码/解码时间) 内存消耗表情清晰图书馆的可用性,易用性(我更喜欢C) 我打算在嵌入式系统中使用这两个之一来存储配置文件。 有关的: 我应该使用YAML还是JSON存储我的Perl数据? 回答1 从技术上讲,YAML是JSON的超集。 这意味着,至少从理论上讲,YAML解析器可以理解JSON,但不一定非要反过来。 请参阅标题为“ YAML:与JSON的关系”的部分中的官方规范。 通常,我喜欢某些关于YAML的东西,这些东西在JSON中不可用。 正如@jdupont指出的那样,YAML在外观上更易于查看。 实际上,YAML主页本身就是有效的YAML,但是对于人类而言,它很容易阅读。 YAML能够使用“锚”引用YAML文件中的其他项目。 因此,它可以处理在MySQL数据库中可能发现的关系信息。 YAML是约YAML文件中嵌入其他的序列化格式诸如JSON或XML更稳健。 在实践中,最后两点都不会对您或我所做的事情有影响,但从长远来看,我认为YAML将是更健壮和可行的数据序列化格式。 目前,AJAX和其他Web技术倾向于使用JSON。 目前,YAML被更多地用于脱机数据处理。 例如,默认情况下,它包含在基于C的OpenCV计算机视觉软件包中,而JSON不包含在其中。 您将找到用于JSON和YAML的C库。
  • 开发类似python的小型语言时的缩进控制(Indentation control while developing a small python like language)
    问题 我正在使用 flex、byacc(用于词法和解析)和 C++ 开发类似 Python 的小型语言,但我有一些关于范围控制的问题。 就像python一样,它使用空格(或制表符)进行缩进,不仅如此,我还想实现索引中断,例如,如果您在另一个while循环内的while循环中键入“break 2”,它不仅会中断最后一个,但也来自第一个循环(因此中断后的数字为 2)等等。 例子: while 1 while 1 break 2 'hello world'!! #will never reach this. "!!" outputs with a newline end 'hello world again'!! #also will never reach this. again "!!" used for cout end #after break 2 it would jump right here 但是由于我没有“反”制表符来检查范围何时结束(例如 C,我只会使用 '}' 字符)我想知道这种方法是否最好: 我会在我的 yacc 文件中定义一个全局变量,比如“int tabIndex”,我将使用 extern 在我的 lex 文件中访问它。 然后每次我在我的 lex 文件中找到一个制表符时,我都会将该变量增加 1。在解析我的 yacc 文件时,如果我找到一个“break”关键字
  • 在Python中执行块之前冒号的目的是什么?(What is the purpose of the colon before a block in Python?)
    问题 在Python中执行块之前冒号的目的是什么? 例子: if n == 0: print "The end" 回答1 冒号在那里声明缩进块的开始。 从技术上讲,这是没有必要的; 您可以在程序段完成后缩进和缩进。 但是,基于Python koan的“显式优于隐式”(EIBTI),我相信Guido故意使冒号成为强制性的,因此任何应在缩进代码后跟随的语句均以冒号结尾。 (如果您继续在冒号后面继续操作,它还允许单线使用,但是这种样式并未得到广泛使用。) 这也使识别语法的自动缩进编辑器的工作变得更加容易,这也算在决策中。 这个问题原来是一个Python FAQ,我在这里找到了Guido的答案之一: 为什么if / while / def / class语句需要冒号? 主要需要使用冒号来增强可读性(实验性ABC语言的结果之一)。 考虑一下: if a == b print a 相对if a == b: print a 请注意,第二个稍微更易于阅读。 请进一步注意冒号如何引起此FAQ回答中的示例; 这是英语的标准用法。 另一个次要原因是冒号使使用语法突出显示的编辑器更加容易。 他们可以寻找冒号来决定何时需要增加缩进量,而不必对程序文本进行更复杂的解析。 回答2 考虑以下从杂货店购买的东西清单,这些东西用Pewprikanese编写。 pewkah lalala chunkykachoo
  • Python,为什么要使用elif关键字? [关闭](Python, why elif keyword? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我刚刚开始Python编程,而我想知道elif关键字。 else if我在使用其他其他语言之前就已经使用过。 有谁知道为什么Python开发人员添加了额外的elif关键字? 为什么不: if a: print("a") else if b: print("b") else: print("c") 回答1 最有可能是语法糖。 就像Visual Basic的Wend 。 回答2 据我所知,它可以避免过度缩进。 你可以写 if x < 0: print 'Negative' else: if x == 0: print 'Zero' else: print 'Positive' 但 if x < 0: print 'Negative' elif x == 0: print 'Zero' else: print 'Positive' 好多了。 感谢ign提供的文档参考: 关键字elif是“ else if”的缩写,对于避免过度缩进很有用。 回答3 类似于C语言语法的语言可以免费获得else if语言,而无需完全实现。
  • PHP解析/语法错误; 以及如何解决它们(PHP parse/syntax errors; and how to solve them)
    问题 每个人都遇到语法错误。 即使是经验丰富的程序员也会打错字。 对于新手来说,这只是学习过程的一部分。 但是,通常很容易解释以下错误消息: PHP解析错误:语法错误,第20行的index.php中出现意外的'{' 意外的符号并不总是真正的罪魁祸首。 但是行号给出了从哪里开始寻找的粗略思路。 始终查看代码上下文。 语法错误通常隐藏在提到的代码行或以前的代码行中。 将您的代码与手册中的语法示例进行比较。 虽然并非每种情况都匹配。 但是,有一些常规步骤可以解决语法错误。 这些参考文献总结了常见的陷阱: 意外的T_STRING 意外的T_VARIABLE意外的'$ varname'(T_VARIABLE) 意外的T_CONSTANT_ENCAPSED_STRING意外的T_ENCAPSED_AND_WHITESPACE 意外的$ end 意外的T_FUNCTION… 意外{意外}意外(意外) 意外[意外] 意外的T_IF意外的T_FOREACH意外的T_FOR意外的T_WHILE意外的T_DO意外的T_PRINT意外的T_ECHO 意外的T_LNUMBER 出乎意料? 意外的继续(T_CONTINUE)意外的继续(T_BREAK)意外的继续(T_RETURN) 意外的'=' 意外的T_INLINE_HTML… 意外的T_PAAMAYIM_NEKUDOTAYIM… 意外的T_OBJECT
  • 如何在语法上使用类似 Python 的缩进编写语言?(How to write a language with Python-like indentation in syntax?)
    问题 我正在用它自己的类似于 Python 的内置语言编写一个工具。 我想让缩进在语法中有意义(以便行首的制表符和空格代表命令的嵌套)。 做这个的最好方式是什么? 我以前写过递归下降和有限自动机解析器。 回答1 当前 CPython 的解析器似乎是使用称为 ASDL 的东西生成的。 关于您要求的缩进,它是使用称为INDENT和DEDENT特殊词法分析器标记完成的。 要复制它,只需在您的词法分析器中实现这些标记(如果您使用堆栈来存储先前缩进行的起始列,这将非常容易),然后像往常一样将它们插入您的语法中(就像任何其他关键字或运算符标记一样) . 回答2 查看 python 编译器,特别是 compiler.parse。 回答3 我建议为任何词法分析器/解析器生成( http://www.antlr.org )使用 ANTLR。 此外,这个网站(http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/)有一些更多的信息,特别是: Python 的缩进无法用 DFA 解决。 (我仍然对它是否可以用上下文无关语法解决感到困惑)。 PyPy 发表了一篇关于对 Python 进行词法分析的有趣帖子(他们打算使用词法分析器输出后处理来解决它) CPython 的分词器是用 C 编写的。它是临时的、手写的并且很复杂。
  • 在同一解决方案中混合使用F#和C#的模式(Patterns to mix F# and C# in the same solution)
    问题 我很少学习功能语言,主要是出于学术目的。 但是,当我必须设计一个客户端服务器应用程序时,我总是开始采用域驱动设计,严格来说是OOP。 用.Net框架编写的复杂解决方案可以使用多种语言获得优势,有时甚至还可以使用范式。 将C或C ++与LUA或Python混合是一种常见的做法,有时嵌入序言可能会非常有趣。 我从未尝试过将OOP和功能范型混合使用。 F#是一种较新的功能和面向对象的语言,我发现在同一解决方案中将C#与F#库混合在技术上非常容易。 但是我想知道这是否有意义:我使用LINQ来满足我的许多功能要求。 您认为何时以及如何将这两种语言混合在一起是一个好主意? 我想知道是否存在一组尝试这样做的模式。 您实际上在C#解决方案中使用F#吗? 回答1 在某些地方,传统功能技术很有意义,并导致代码更小,更简洁。 一个典型的例子是文本解析和树处理,当您实现DSL时,它们经常同时出现。 F#功能(如匿名迭代器,可扩展的模式匹配以及定义自定义中缀运算符以用作组合器的功能)在这里确实很有帮助。 同时,在C#方面,LINQ是一个不错的开始,但是并不能带您一路走来。 我建议您看一下FParsec,并亲自了解它比用C#可能编写的任何库更适合高级文本处理/解析。 回答2 我已经用F#编写了WCF服务,用作读取WFS(地理空间数据)服务的翻译器插件。 该代码结果简洁明了。
  • 基于Visual C++2010 混合Python编程以及Python简介
    基于Visual C++2010 混合Python编程以及Python简介 我们重点讲解如何在基于Visual C++2010 开发Python的调用,先介绍下Python, Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。它的名字来源于一个喜剧,也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用。著名的自由软件作者Eric Raymond在他的文章《如何成为一名***》中,将Python列为***应当学习的四种编程语言之一,并建议人们从Python开始学习编程。 下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:  在python2.x版本中  #!/usr/bin/env python  print "Hello, world!"  或者:  import sys  sys.stdout.write("Hello, world/n")  ///////  在python3.x中  print是一个完完全全的函数,需要修改成:  print('Hello world!') Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ABC