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)
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输入.这就是解析器的作用.
此外,在此过程中,可以创建数据结构以供进一步处理.在我之前的例子中,它可以,例如,存储AA和BB在两个单独的堆栈中.
任何后出现这种情况,就像给含义AA或BB,或别的东西改造它,是不是解析.赋予输入序列标记部分意义称为语义分析.
我认为理解解析概念的最好方法是从更简单的概念开始.语言处理主题中最简单的是有限自动机.解析常规语言(如正则表达式)是一种形式主义.
这很简单,你有一个输入,一组状态和一组转换.考虑建在字母表以下语言{ 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,记住只记得字母表)A和B你移动到(q2)状态等等.如果达到(qf)状态,则接受输入.
因为它是视觉的,你只需要一支铅笔和一张纸来解释解析器对任何人的影响,包括一个孩子.我认为简单性是使自动机成为教学语言处理概念最合适的方式,例如解析.
最后,作为一名计算机科学专业的学生,您将深入学习理论计算机科学课程,如形式语言和计算理论.