Perl 6의Grammar 학습 총결산

2764 단어
문법 해석의 목적은 이 언어를 점차적으로 하나의 언어로 진화시키기 위한 것이다.이런 언어의 내핵은 틀림없이Lisp이지만 외형은 창작자가 가장 좋아하는 것이다.
과거의 모든 것을 사용할 수 있지만, 업데이트된 것이 있다.업데이트된 언어.이 언어들은 모두 서로 통한다.어떤 언어로 쓴 코드든지 다른 코드로 변환할 수 있다.
Perl 6에서 다음 identifier를 허용합니다.
person's-name first-name middle-name last-name

그러나 다음 형식은 허용되지 않습니다.
list->vector string? sort!

Perl 6은 여러 연산자를 정의하지만 이 연산자는 사용자 정의할 수 없으며 소스에서만 정의할 수 있습니다.
+ - * ^ /

JSON 데이터 교환 형식이 있는 이상 알고리즘 교환 형식이 있어야 한다. 마치 제품을 출력하고 기술도 출력하는 것 같다.
정규 표현식은 규칙을 묘사하는 언어이고 전통적인 언어는 알고리즘을 묘사하는 언어이다.regex는 Prolog와 같습니다. 우리가 원하는 것을 설명하면 컴퓨터가 조건에 맞는 서열을 계산해 줍니다.
Perl 6가 레지스트를 첫 번째 유형의 대상으로 추상화한 것은 이상하지 않지만, 그람마도 추상화했다.
하나의 클래스나 모듈처럼 Grammar을 디자인하려면 Perl 6 디자인 클래스의 규칙을 배워야 한다.
regex가dot(.)처음에, 이 regex는 Match Object에 저장되지 않습니다. 즉, Match에서 기본적으로 이름이 붙어서 포획됩니다.
regex foo { <.bar> }

그럼 레지스트에서도 최대한 브레이크를 사용해서 디자인을 해보도록 하겠습니다.
Grammar에서 regex도 키워드가 있습니다.
my $match = YourGrammar.parse($some-string);

괄호와 명명regex만 물건을 잡을 수 있지만, 내장된 <:LC>는 물건을 잡을 수 있습니까?
기본값, 호출.parse () 이 방법은Grammar에서 탑의regex를 먼저 찾아서 문자열을 해석합니다.탑을 찾지 못하면 오타가 난다.그래서 키워드야.탑을 그람마의 입구로 삼을 수 있다.물론, 너는 쓰지 않아도 된다.
my $match = YourGrammar.parse($some-string, :rule<fred>);

그람마는 클라쓰처럼 계승할 수 있고 개작할 수 있다.반드시 핵심 디자이너가 Perl 6, Perl 5 Ruby 등 언어의 Grammar를 디자인하여 모두가 테스트할 수 있도록 해야 한다.이 언어에 익숙해지면 Antrl 등 소프트웨어의 g4 자원을 변환할 수 있다.
코드는 대괄호 안에 직접 박을 수 있지만 계승하는 문법과 문법 규칙은 무엇입니까?
grammar Foo {
    regex foo { blah blah { say "hi" } blah blah }
}

"aaa" ~~ / a { say "hi" } b/

regex에 코드를 삽입하려면 백트랙킹을 조심스럽게 거슬러 올라가야 합니다.
또 다른regex에 코드를 삽입하는 행위는 하위 프로그램을 삽입하는 것이다.
grammar foo {
    regex foo { <.setup> blah blah }
    method setup {
        # do stuff here
    }
}

Perl 6의 정규 표현식 언어는 모든 언어에 없는 것이다.

미리 정의된 실행 actions object:

my $match = Grammar.parse($string, :rule($start-regex), :actions($actions-object));

Antlr는 Java의 도구일 뿐이고 Perl 6는 같은 일을 하는 언어이다.가상 머신, 해석기, 그리고 컴파일러가 내장되어 있다.
수량 기호가 있는 포획은 수조에 저장되는데 Perl 5도 그렇지 않을까요?
if "hello" =~ s/(\w)+/a/g { say @+; }

실제 한 위치만 포착했기 때문에 Perl 5는 그렇지 않다.가능한 한 regex로 지정한 위치의 데이터 구조를 가져옵니다.

token과 rule


token이 정의한regex는 영원히 거슬러 올라가지 않습니다:
token ident { [ <alpha> | \- ] \w* }

등가:
regex ident { [ <alpha>: | \-: ]: \w*: }

rule가 정의한 규칙은 거슬러 올라갈 수 없을 뿐만 아니라, 기본값은 sigspace 모드입니다.
regex :ratchet :sigspace { ... }

token, rule는 모두regex에서 진화한 것이다.

좋은 웹페이지 즐겨찾기