Programing

새로운 프로그래머가 이해할 수있는 구문 분석이란 무엇입니까?

lottogame 2020. 12. 11. 07:41
반응형

새로운 프로그래머가 이해할 수있는 구문 분석이란 무엇입니까?


저는 컴퓨터 과학 학위를받는 대학생입니다. 많은 동료 학생들이 실제로 많은 프로그래밍을하지 않았습니다. 그들은 수업 과제를 완료했지만 여기서 솔직히 말해서 그 질문은 실제로 프로그래밍 방법을 가르쳐주지 않습니다.

나는 몇몇 다른 학생들이 어떻게 파싱하는지에 대해 나에게 질문을하게했고, 그들에게 어떻게 설명해야할지 잘 모르겠습니다. 하위 문자열을 찾기 위해 줄 단위로 시작하거나 적절한 어휘 분석 등을 사용하여 토큰을 만들고 BNF를 사용하는 등의 모든 다른 작업에 대해 더 복잡한 강의를 제공하는 것이 가장 좋은가요? 내가 설명하려고 할 때 그들은 그것을 이해하지 못합니다.

그들을 혼동하거나 실제로 시도하는 것을 막지 않고 이것을 설명하는 가장 좋은 접근 방법은 무엇입니까?


어떤 종류의 데이터를 다른 종류의 데이터로 바꾸는 과정으로 파싱을 설명하겠습니다.

실제로 이것은 거의 항상 문자열 또는 이진 데이터를 프로그램 내부의 데이터 구조로 바꾸는 것입니다.

예를 들어,

":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!" }

구문 분석 은 일련의 토큰으로 구성된 텍스트를 분석하여 주어진 (다소 또는 적은) 형식 문법에 대한 문법 구조를 결정하는 프로세스입니다.

그런 다음 파서는 토큰을 기반으로 데이터 구조를 구축합니다. 그런 다음 컴파일러, 인터프리터 또는 변환기가이 데이터 구조를 사용하여 실행 가능한 프로그램 또는 라이브러리를 만들 수 있습니다.

대체 텍스트
(출처 : wikimedia.org )

내가 당신에게 영어 문장을 주었고 문장을 품사 (명사, 동사 등)로 나누도록 요청했다면, 당신은 문장을 파싱 할 것입니다.

이것이 제가 생각할 수있는 파싱에 대한 가장 간단한 설명입니다.

즉, 구문 분석은 사소한 계산 문제입니다. 간단한 예제로 시작하여 더 복잡한 방법으로 작업해야합니다.


파싱이란 무엇입니까?

컴퓨터 과학에서 구문 분석은 텍스트를 분석하여 특정 언어에 속하는지 여부를 결정하는 프로세스입니다 (즉 , 해당 언어의 문법에 대해 구문 적으로 유효한지 여부 ). 구문 분석 프로세스 의 비공식적 인 이름입니다 .

예를 들어, 언어 a^n b^n(동일한 수의 문자 A 다음에 동일한 수의 문자 B를 의미 함)를 가정하십시오 . 해당 언어의 구문 분석기는 AABB입력 을 수락하고 입력을 거부합니다 AAAB. 이것이 파서가하는 일입니다.

또한이 프로세스 중에 추가 처리를 위해 데이터 구조를 만들 수 있습니다. 내 앞의 예에서는, 예를 들어, 저장하는 수 AABB두 개의 스택입니다.

AA또는에 의미를 부여 하거나 BB다른 것으로 변환하는 것과 같이 그 이후에 발생하는 모든 작업 은 구문 분석이 아닙니다. 토큰의 입력 시퀀스의 일부에 의미를 부여하는 것을 의미 분석 이라고 합니다 .

파싱하지 않는 것은 무엇입니까?

  • 파싱은 한 가지를 다른 것으로 변환하는 것이 아닙니다. 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)

It is a very simple parser for that language. You start at (q0), the initial state, then you read a symbol from the input, if it is A then you move to (q1) state, otherwise (it is a B, remember the remember the alphabet is only A and B) you move to (q2) state and so on. If you reach (qf) state, then the input was accepted.

As it is visual, you only need a pencil and a piece of paper to explain what a parser is to anyone, including a child. I think the simplicity is what makes the automata the most suitable way to teaching language processing concepts, such as parsing.

Finally, being a Computer Science student, you will study such concepts in-deep at theoretical computer science classes such as Formal Languages and Theory of Computation.


Have them try to write a program that can evaluate arbitrary simple arithmetic expressions. This is a simple problem to understand but as you start getting deeper into it a lot of basic parsing starts to make sense.


Parsing is about READING data in one format, so that you can use it to your needs.

I think you need to teach them to think like this. So, this is the simplest way I can think of to explain parsing for someone new to this concept.

Generally, we try to parse data one line at a time because generally it is easier for humans to think this way, dividing and conquering, and also easier to code.

We call field to every minimum undivisible data. Name is field, Age is another field, and Surname is another field. For example.

In a line, we can have various fields. In order to distinguish them, we can delimit fields by separators or by the maximum length assign to each field.

For example: By separating fields by comma

Paul,20,Jones

Or by space (Name can have 20 letters max, age up to 3 digits, Jones up to 20 letters)

Paul                020Jones               

Any of the before set of fields is called a record.

To separate between a delimited field record we need to delimit record. A dot will be enough (though you know you can apply CR/LF).

A list could be:

Michael,39,Jordan.Shaquille,40,O'neal.Lebron,24,James.

or with CR/LF

Michael,39,Jordan
Shaquille,40,O'neal
Lebron,24,James

You can say them to list 10 nba (or nlf) players they like. Then, they should type them according to a format. Then make a program to parse it and display each record. One group, can make list in a comma-separated format and a program to parse a list in a fixed size format, and viceversa.


Parsing to me is breaking down something into meaningful parts... using a definable or predefined known, common set of part "definitions".

For programming languages there would be keyword parts, usable punctuation sequences...

For pumpkin pie it might be something like the crust, filling and toppings.

For written languages there might be what a word is, a sentence, what a verb is...

For spoken languages it might be tone, volume, mood, implication, emotion, context

Syntax analysis (as well as common sense after all) would tell if what your are parsing is a pumpkinpie or a programming language. Does it have crust? well maybe it's pumpkin pudding or perhaps a spoken language !

One thing to note about parsing stuff is there are usually many ways to break things into parts.

For example you could break up a pumpkin pie by cutting it from the center to the edge or from the bottom to the top or with a scoop to get the filling out or by using a sledge hammer or eating it.

And how you parse things would determine if doing something with those parts will be easy or hard.

In the "computer languages" world, there are common ways to parse text source code. These common methods (algorithims) have titles or names. Search the Internet for common methods/names for ways to parse languages. Wikipedia can help in this regard.


In linguistics, to divide language into small components that can be analyzed. For example, parsing this sentence would involve dividing it into words and phrases and identifying the type of each component (e.g.,verb, adjective, or noun).

Parsing is a very important part of many computer science disciplines. For example, compilers must parse source code to be able to translate it into object code. Likewise, any application that processes complex commands must be able to parse the commands. This includes virtually all end-user applications.

Parsing is often divided into lexical analysis and semantic parsing. Lexical analysis concentrates on dividing strings into components, called tokens, based on punctuationand other keys. Semantic parsing then attempts to determine the meaning of the string.

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


Simple explanation: Parsing is breaking a block of data into smaller pieces (tokens) by following a set of rules (using delimiters for example), so that this data could be processes piece by piece (managed, analysed, interpreted, transmitted, ets).

예 : 스프레드 시트 프로그램과 같은 많은 응용 프로그램은 CSV (쉼표로 구분 된 값) 파일 형식을 사용하여 데이터를 가져오고 내 보냅니다. CSV 형식을 사용하면 응용 프로그램에서 특수 구문 분석기를 사용하여이 데이터를 처리 할 수 ​​있습니다. 웹 브라우저에는 HTML 및 CSS 파일에 대한 특수 파서가 있습니다. JSON 파서가 있습니다. 모든 특수 파일 형식에는 특별히 설계된 일부 파서가 있어야합니다.

참고 URL : https://stackoverflow.com/questions/2933192/what-is-parsing-in-terms-that-a-new-programmer-would-understand

반응형

'Programing' 카테고리의 다른 글

왜“!!”  (0) 2020.12.11
구속 레이아웃 수직 정렬 중심  (0) 2020.12.11
클래스 경로는 Linux에서 작동하지 않습니다.  (0) 2020.12.11
모든 기록 삭제  (0) 2020.12.11
소켓을 통한 Java 송수신 파일 (byte [])  (0) 2020.12.11