什么是一个新的程序员会理解的parsing?

我是一名获得计算机科学学位的大学生。 我的很多同学真的没有做很多的编程。 他们已经完成了课堂作业,但是说实话,这些问题并没有真正教会你如何编程。

我还有其他几个学生问我如何parsing问题,而我也不太清楚如何向他们解释。 最好是开始一行一行地寻找子串,或者只是给他们更复杂的关于使用适当的词法分析等来创build令牌,使用BNF和所有其他的东西的讲座? 当我试图解释它们的时候,他们从来都不太明白。

什么是最好的方法来解释这一点,而不会混淆它们或阻止他们实际尝试。

我将解释解释为将某种数据转换为另一种数据的过程。

在实践中,对于我来说,这几乎总是将string或二进制数据转换为我的程序中的数据结构。

例如,转动

":Nick!User@Host PRIVMSG #channel :Hello!" 

(C)

 struct irc_line { char *nick; char *user; char *host; char *command; char **arguments; char *message; } sample = { "Nick", "User", "Host", "PRIVMSG", { "#channel" }, "Hello!" } 

parsing是分析由一系列令牌组成的文本以确定其关于给定(或多或less)forms语法的语法结构的过程。

parsing器然后build立一个基于令牌的数据结构。 这个数据结构可以被编译器,解释器或翻译器用来创build一个可执行的程序或库。

替代文字http://upload.wikimedia.org/wikipedia/en/a/a9/Parser_Flow.gif

如果我给了你一个英文句子,并要求你把这个句子分解成它的词性(名词,动词等),你就可以parsing句子。

这是解释我能想到的最简单的解释。

这就是说,parsing是一个不平凡的计算问题。 你必须从简单的例子开始,一路走到更复杂的地步。

什么是parsing?

在计算机科学中,parsing是分析文本以确定其是否属于特定语言(即对于该语言的语法语法上有效 )的过程。 这是句法分析过程的非正式名称。

例如,假设语言a^nb^n (表示相同数量的字符A,后跟相同数量的字符B)。 该语言的parsing器将接受AABBinput并拒绝AAABinput。 这是一个parsing器所做的。

另外,在这个过程中,可以创build一个数据结构进行进一步的处理。 在我之前的例子中,它可以将AABB存储在两个独立的堆栈中。

任何发生在它后面的事情,比如赋予AABB意义,或者改变其他东西,都不是parsing。 赋予令牌的input序列部分的含义称为语义分析 。

什么是不parsing?

  • parsing不是将一件事物转化为另一件事物。 将A转换成B,本质上是编译器的function。 编译需要几个步骤,parsing只是其中的一个。
  • parsing不是从文本中提取的意思。 从文本中提取意义,是语义分析 ,这是编译过程的一个步骤。

了解它最简单的方法是什么?

我认为理解分析概念的最好方法是从简单的概念开始。 语言处理主体中最简单的是有穷自动机。 这是parsing常规语言(如正则expression式)的一种forms。

这很简单,你有一个input,一组状态和一组转换。 考虑在字母表{ A, B }build立的以下语言, L = { w | w starts with 'AA' or 'BB' as substring } L = { w | w starts with 'AA' or 'BB' as substring } 。 下面的自动机表示该语言的可能parsing器,其所有有效单词以“AA”或“BB”开头。

  A-->(q1)--A-->(qf) / (q0) \ B-->(q2)--B-->(qf) 

这是一个非常简单的语言parsing器。 你从(q0)开始,初始状态,然后你从input中读取一个符号,如果是A那么你就移动到(q1)状态,否则(这是一个B ,记住记住字母表只是AB )你移到(q2)状态等等。 如果达到(qf)状态,则input被接受。

因为它是可视的,所以只需要一支铅笔和一张纸来解释一个parsing器对任何人,包括一个孩子。 我认为简单性是使自动机成为教授语言处理概念(如parsing)的最合适的方式。

最后,作为一名计算机科学专业的学生,​​您将深入研究理论计算机科学课程中的这些概念,例如forms语言和计算理论。

让他们尝试编写一个可以评估任意简单算术expression式的程序。 这是一个很容易理解的问题,但是当你开始深入了解的时候,很多基本的parsing开始变得有意义。

在语言学中,把语言分成可以分析的小部分。 例如,parsing这个句子将涉及到将它分成单词和短语,并确定每个成分的types(例如,动词,形容词或名词)。

parsing是许多计算机科学学科非常重要的一部分。 例如,编译器必须parsing源代码才能将其转换为目标代码。 同样,处理复杂命令的任何应用程序都必须能够parsing命令。 这几乎包括所有的最终用户应用程序。

parsing通常分为词法分析和语义parsing。 词汇分析着重于将string划分为基于标点符号和其他键的称为令牌的组件。 然后语义分析试图确定string的含义。

http://www.webopedia.com/TERM/P/parse.html

parsing是关于以一种格式读取数据,以便您可以使用它来满足您的需求。

我想你需要教他们这样想。 所以,这是我能想到解释一个新的这个概念的人最简单的方法。

一般来说,我们试图一次一行地parsing数据,因为一般来说人类更容易思考,分裂和征服,也更容易编码。

我们把领域称为每一个最小的不可变数据。 名称是字段,年龄是另一个字段,而姓氏是另一个字段。 例如。

一行,我们可以有各种各样的领域。 为了区分它们,我们可以用分隔符或每个字段的最大长度来分隔字段。

例如:通过逗号分隔字段

保罗,20,琼斯

或者按空格(姓名最多可以有20个字母,年龄最多3个数字,琼斯最多20个字母)

保罗020琼斯

前面任何一组字段都称为logging。

要隔开一个分隔的字段logging,我们需要分隔logging。 一个点就足够了(尽pipe你知道你可以应用CR / LF)。

列表可能是:

迈克尔,39,Jordan.Shaquille,40,O'neal.Lebron,24,詹姆斯。

或与CR / LF

迈克尔,39,约旦
沙奎尔,40,奥尼尔
勒布朗,24,詹姆斯

你可以说他们列出他们喜欢的10个nba(或nlf)球员。 然后,他们应该按照格式input。 然后制作一个程序来parsing它并显示每条logging。 一个组可以列表以逗号分隔的格式和一个程序来parsing一个固定大小的格式的列表,反之亦然。

对我来说,parsing是将某些东西分解成有意义的部分…使用一个可定义的或预定义的已知的,通用的部分“定义”。

对于编程语言,会有关键字部分,可用的标点符号…

南瓜派可能是像地壳,填充和浇头。

对于书面语言,可能是一个单词,一个句子,一个动词是什么…

对于口语来说,它可能是音调,音量,情绪,含义,情感,语境

语法分析(以及常识)会告诉你的parsing是一个南瓜还是一种编程语言。 它有shell吗? 也许是南瓜布丁或口语!

关于parsing东西需要注意的一件事情是,通常有很多方法可以将东西分解成几部分。

例如,你可以把南瓜馅饼从中心切到边缘,或者从底部切到顶部,或者用勺子把馅饼馅或者用大锤或者吃掉。

而你如何parsing事情将决定如果做这些部分将是容易或困难的。

在“计算机语言”的世界里,有很多常见的parsing文本源代码的方法。 这些常用方法(algorithm)有标题或名称。 在因特网上search常见的方法/名称来parsing语言。 维基百科可以在这方面提供帮助。

简单的解释:parsing是通过遵循一组规则(例如使用分隔符)将数据块分割成小块(令牌),以便这些数据可以一块一块地进行处理(pipe理,分析,解释,传输,ets) 。

示例:许多应用程序(如Spreadsheet程序)使用CSV(逗号分隔值)文件格式导入和导出数据。 CSV格式使得应用程序可以在特殊分析器的帮助下处理这些数据。 Web浏览器为HTML和CSS文件提供了特殊的parsing器。 存在JSONparsing器。 所有特殊的文件格式都必须有专门为它们devise的parsing器。