什么是解析新程序员会理解的术语?

Dai*_*tsu 61 parsing new-operator

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

我有几个其他学生问我关于如何解析事情的问题,我也不确定如何向他们解释.最好是开始逐行寻找子串,或者只是给他们更复杂的讲座,使用正确的词法分析等来创建令牌,使用BNF,以及所有其他的东西?当我试图解释它时,他们从来都不太了解它.

解决这个问题的最佳方法是什么,不要混淆或阻止他们实际尝试.

Luk*_*keN 68

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

在实践中,对我来说,这几乎总是将字符串或二进制数据转换为程序内的数据结构.

例如,转弯

":Nick!User@Host PRIVMSG #channel :Hello!"
Run Code Online (Sandbox Code Playgroud)

进入(C)

struct irc_line {
    char *nick;
    char *user;
    char *host;
    char *command;
    char **arguments;
    char *message;
} sample = { "Nick", "User", "Host", "PRIVMSG", { "#channel" }, "Hello!" }
Run Code Online (Sandbox Code Playgroud)

  • -1卡洛斯是对的.解析不是将数据转化为其他任何东西.解析只是对一系列字符(或标记)的分析.从分析中创造一些东西是完全不同的事情. (4认同)
  • 在某些存在层面上,每个程序都是关于将一​​种数据转换为另一种数据(不是函数的定义吗?).我认为更明确的表达方式就是说解析是将*names*分配给输入位的过程.在您的示例中,您将名称`sample.message`分配给字符`"Hello!"`.这是将*含义*分配给名称的任务的必要先决条件,但完全独立 - 例如,`sample.message`是什么意思,或者它做什么?正如卡洛斯指出的那样,这就成了*语义*分析. (4认同)
  • +1解释复杂术语的有趣方式 (3认同)

Rob*_*vey 33

解析是分析由一系列令牌构成的文本以确定其相对于给定(或多或少)形式语法的语法结构的过程.

解析器然后基于令牌构建数据结构.然后,编译器,解释器或翻译器可以使用该数据结构来创建可执行程序或库.

alt text http://upload.wikimedia.org/wikipedia/en/a/a9/Parser_Flow.gif

如果我给你一个英文句子,并要求你将句子分解为其词性(名词,动词等),你就会解析句子.

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

也就是说,解析是一个非常重要的计算问题.您必须从简单的示例开始,然后逐步完成更复杂的工作.


CAR*_*OTH 23

什么是解析?

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

例如,假设语言a^n b^n(表示相同数量的字符A后跟相同数量的字符B).该语言的解析器将接受AABB输入并拒绝AAAB输入.这就是解析器的作用.

此外,在此过程中,可以创建数据结构以供进一步处理.在我之前的例子中,它可以,例如,存储AABB在两个单独的堆栈中.

任何后出现这种情况,就像给含义AABB,或别的东西改造它,是不是解析.赋予输入序列标记部分意义称为语义分析.

什么不解析?

  • 解析并不是将一件事变成另一件事.将A转换为B,实质上是编译器的作用.编译需要几个步骤,解析只是其中之一.
  • 解析不是从文本中提取含义.从文本中提取意义,是语义分析,这是编译过程的一个步骤.

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

我认为理解解析概念的最好方法是从更简单的概念开始.语言处理主题中最简单的是有限自动机.解析常规语言(如正则表达式)是一种形式主义.

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

    A-->(q1)--A-->(qf)
   /  
 (q0)    
   \          
    B-->(q2)--B-->(qf)
Run Code Online (Sandbox Code Playgroud)

它是一种非常简单的语言解析器.你从(q0)初始状态开始,然后你从输入中读取一个符号,如果它是A你移动到(q1)状态,否则(它是一个B,记住只记得字母表)AB你移动到(q2)状态等等.如果达到(qf)状态,则接受输入.

因为它是视觉的,你只需要一支铅笔和一张纸来解释解析器对任何人的影响,包括一个孩子.我认为简单性是使自动机成为教学语言处理概念最合适的方式,例如解析.

最后,作为一名计算机科学专业的学生,​​您将深入学习理论计算机科学课程,如形式语言和计算理论.


Sij*_*jin 5

让他们尝试编写一个可以评估任意简单算术表达式的程序.这是一个需要理解的简单问题,但随着您开始深入研究,许多基本的解析开始变得有意义.