🗊Презентация Использование парсер-комбинаторов на Sprache для построения DSL

Нажмите для полного просмотра!
Использование парсер-комбинаторов на Sprache для построения DSL, слайд №1Использование парсер-комбинаторов на Sprache для построения DSL, слайд №2Использование парсер-комбинаторов на Sprache для построения DSL, слайд №3Использование парсер-комбинаторов на Sprache для построения DSL, слайд №4Использование парсер-комбинаторов на Sprache для построения DSL, слайд №5Использование парсер-комбинаторов на Sprache для построения DSL, слайд №6Использование парсер-комбинаторов на Sprache для построения DSL, слайд №7Использование парсер-комбинаторов на Sprache для построения DSL, слайд №8Использование парсер-комбинаторов на Sprache для построения DSL, слайд №9Использование парсер-комбинаторов на Sprache для построения DSL, слайд №10Использование парсер-комбинаторов на Sprache для построения DSL, слайд №11Использование парсер-комбинаторов на Sprache для построения DSL, слайд №12Использование парсер-комбинаторов на Sprache для построения DSL, слайд №13Использование парсер-комбинаторов на Sprache для построения DSL, слайд №14Использование парсер-комбинаторов на Sprache для построения DSL, слайд №15Использование парсер-комбинаторов на Sprache для построения DSL, слайд №16Использование парсер-комбинаторов на Sprache для построения DSL, слайд №17Использование парсер-комбинаторов на Sprache для построения DSL, слайд №18Использование парсер-комбинаторов на Sprache для построения DSL, слайд №19Использование парсер-комбинаторов на Sprache для построения DSL, слайд №20Использование парсер-комбинаторов на Sprache для построения DSL, слайд №21Использование парсер-комбинаторов на Sprache для построения DSL, слайд №22Использование парсер-комбинаторов на Sprache для построения DSL, слайд №23Использование парсер-комбинаторов на Sprache для построения DSL, слайд №24Использование парсер-комбинаторов на Sprache для построения DSL, слайд №25Использование парсер-комбинаторов на Sprache для построения DSL, слайд №26Использование парсер-комбинаторов на Sprache для построения DSL, слайд №27Использование парсер-комбинаторов на Sprache для построения DSL, слайд №28Использование парсер-комбинаторов на Sprache для построения DSL, слайд №29Использование парсер-комбинаторов на Sprache для построения DSL, слайд №30

Содержание

Вы можете ознакомиться и скачать презентацию на тему Использование парсер-комбинаторов на Sprache для построения DSL. Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Использование парсер-комбинаторов на Sprache
Евгений Романовский
Описание слайда:
Использование парсер-комбинаторов на Sprache Евгений Романовский

Слайд 2





Задача
«Восстановить» объект из строки
Шаблонизатор с подстановкой переменных
Описание слайда:
Задача «Восстановить» объект из строки Шаблонизатор с подстановкой переменных

Слайд 3





Подходы к решению
Описание слайда:
Подходы к решению

Слайд 4





1. Парсеры, написанные вручную
Подходят, когда решение очевидно (Split, IndexOf, Substring)
public class SecurityToken
{
    public string UserId { get; set; }
    public DateTime ValidTo { get; set; }
}
Нужно распарсить строку
"8cb9f238-e0e4-431c-86a6-9ac52b9cb6b9;2017-04-20T00:00:00Z"
Описание слайда:
1. Парсеры, написанные вручную Подходят, когда решение очевидно (Split, IndexOf, Substring) public class SecurityToken { public string UserId { get; set; } public DateTime ValidTo { get; set; } } Нужно распарсить строку "8cb9f238-e0e4-431c-86a6-9ac52b9cb6b9;2017-04-20T00:00:00Z"

Слайд 5





2. Регулярные выражения
Относительно простая грамматика в простых случаях
Трудно читать и поддерживать
Невозможно работать с вложенными данными
Не масштабируется на более сложные грамматики
Описание слайда:
2. Регулярные выражения Относительно простая грамматика в простых случаях Трудно читать и поддерживать Невозможно работать с вложенными данными Не масштабируется на более сложные грамматики

Слайд 6





3. Генераторы парсеров
Генерирует классы на целевом языке (Java, C#, …) во время сборки проекта, которые способные разбирать грамматику
Требует времени для изучения и интеграции
Подходит для очень сложных вещей, где важна скорость разбора
ANTLR (http://www.antlr.org)
Описание слайда:
3. Генераторы парсеров Генерирует классы на целевом языке (Java, C#, …) во время сборки проекта, которые способные разбирать грамматику Требует времени для изучения и интеграции Подходит для очень сложных вещей, где важна скорость разбора ANTLR (http://www.antlr.org)

Слайд 7





3. Генераторы парсеров (ANTLR)
grammar Speak;
/* Parser Rules */
chat		: line line EOF ;
line		: name SAYS word NEWLINE;
name		: WORD ;
word		: WORD ;
/* Lexer Rules */ 
fragment A          : ('A'|'a') ;
fragment S          : ('S'|'s') ;
fragment Y          : ('Y'|'y') ;
 
fragment LOWERCASE  : [a-z] ;
fragment UPPERCASE  : [A-Z] ;
 
SAYS		 : S A Y S ;
WORD		 : (LOWERCASE | UPPERCASE)+ ;
WHITESPACE	 : (' '|'\t')+ -> skip ;
NEWLINE 	 : ('\r'? '\n' | '\r')+ ;
Описание слайда:
3. Генераторы парсеров (ANTLR) grammar Speak; /* Parser Rules */ chat : line line EOF ; line : name SAYS word NEWLINE; name : WORD ; word : WORD ; /* Lexer Rules */  fragment A          : ('A'|'a') ; fragment S          : ('S'|'s') ; fragment Y          : ('Y'|'y') ;   fragment LOWERCASE  : [a-z] ; fragment UPPERCASE  : [A-Z] ;   SAYS  : S A Y S ; WORD  : (LOWERCASE | UPPERCASE)+ ; WHITESPACE  : (' '|'\t')+ -> skip ; NEWLINE  : ('\r'? '\n' | '\r')+ ;

Слайд 8





4. Парсер-комбинаторы
Мини-язык описания
Логика написана на том же языке, что и остальное приложение (C#)
Техника пришла из функциональных языков
Описание слайда:
4. Парсер-комбинаторы Мини-язык описания Логика написана на том же языке, что и остальное приложение (C#) Техника пришла из функциональных языков

Слайд 9





Sprache - C# Parser Framework
Легко писать
Легко поддерживать
Хорошо сочетается с TDD
Маленький размер библиотеки
https://github.com/sprache/Sprache
Описание слайда:
Sprache - C# Parser Framework Легко писать Легко поддерживать Хорошо сочетается с TDD Маленький размер библиотеки https://github.com/sprache/Sprache

Слайд 10





Parser
public delegate IResult<T> Parser<out T>(IInput input);
public interface IResult<out T>
{
    T Value { get; }
    bool WasSuccessful { get; }
    IInput Remainder { get; }
}
Описание слайда:
Parser public delegate IResult<T> Parser<out T>(IInput input); public interface IResult<out T> { T Value { get; } bool WasSuccessful { get; } IInput Remainder { get; } }

Слайд 11





Primitive parsers
Parse.Char('<')
Parse.Digit
Parse.WhiteSpace
Parse.Numeric
Parse.AnyChar
Parse.LineEnd
Parse.LetterOrDigit
…
Описание слайда:
Primitive parsers Parse.Char('<') Parse.Digit Parse.WhiteSpace Parse.Numeric Parse.AnyChar Parse.LineEnd Parse.LetterOrDigit …

Слайд 12





Parsers and combinators - Sequence
Описание слайда:
Parsers and combinators - Sequence

Слайд 13





Parsers and combinators - Or
Описание слайда:
Parsers and combinators - Or

Слайд 14





Parsers and combinators - Optional
Описание слайда:
Parsers and combinators - Optional

Слайд 15





Parsers and combinators - Many
Описание слайда:
Parsers and combinators - Many

Слайд 16





Строим свои парсеры
Parser<string> identifier =
    from leading in Parse.WhiteSpace.Many()
    from first in Parse.Letter.Once()
    from rest in Parse.LetterOrDigit.Many()
    from trailing in Parse.WhiteSpace.Many()
    select new string(first.Concat(rest).ToArray());
var id = identifier.Parse(" abc123  ");
Assert.AreEqual("abc123", id);
Описание слайда:
Строим свои парсеры Parser<string> identifier = from leading in Parse.WhiteSpace.Many() from first in Parse.Letter.Once() from rest in Parse.LetterOrDigit.Many() from trailing in Parse.WhiteSpace.Many() select new string(first.Concat(rest).ToArray()); var id = identifier.Parse(" abc123 "); Assert.AreEqual("abc123", id);

Слайд 17





Off-topic: Select, SelectMany, Where C#
public static IEnumerable<U> Select<T, U>(this IEnumerable<T> source, Func<T, U> selector)
public static IEnumerable<U> SelectMany<T, U, V>(this IEnumerable<U> parser, Func<T, Parser<U>> selector, Func<T, U, V> projector)
public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate)
Описание слайда:
Off-topic: Select, SelectMany, Where C# public static IEnumerable<U> Select<T, U>(this IEnumerable<T> source, Func<T, U> selector) public static IEnumerable<U> SelectMany<T, U, V>(this IEnumerable<U> parser, Func<T, Parser<U>> selector, Func<T, U, V> projector) public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate)

Слайд 18





Off-topic: Select, SelectMany, Where C#
public static Parser<U> Select<T, U>(this Parser<T> parser, Func<T, U> convert)
public static Parser<V> SelectMany<T, U, V>(this Parser<T> parser, Func<T, Parser<U>> selector, Func<T, U, V> projector)
public static Parser<T> Where<T>(this Parser<T> parser, Func<T, bool> predicate)
Описание слайда:
Off-topic: Select, SelectMany, Where C# public static Parser<U> Select<T, U>(this Parser<T> parser, Func<T, U> convert) public static Parser<V> SelectMany<T, U, V>(this Parser<T> parser, Func<T, Parser<U>> selector, Func<T, U, V> projector) public static Parser<T> Where<T>(this Parser<T> parser, Func<T, bool> predicate)

Слайд 19





Примеры задач
Описание слайда:
Примеры задач

Слайд 20





1. Парсинг из текста
public class Person
{
    public Person(…)
    {
        Type = type;
        Properties = properties;
    }
    public string Type { get; }
    public IEnumerable<Property> Properties { get; }
}
Описание слайда:
1. Парсинг из текста public class Person { public Person(…) { Type = type; Properties = properties; } public string Type { get; } public IEnumerable<Property> Properties { get; } }

Слайд 21





1. Парсинг из текста
magician
[
	name      ‘Merlin’
	age   100500
]
Описание слайда:
1. Парсинг из текста magician [ name      ‘Merlin’ age  100500 ]

Слайд 22





Demo 1 (парсинг из текста)
Описание слайда:
Demo 1 (парсинг из текста)

Слайд 23





2. Шаблонизатор
var props = new Dictionary<string, object>
{
    {"Number", "MX-123"},
    {"Date", new DateTime(2017, 04, 19)},
    {"Caption", "Счет"}
};
string template = "{{Caption}} №{{Number}} от {{Date}}";
"Счет №MX-123 от 19.04.17"
Описание слайда:
2. Шаблонизатор var props = new Dictionary<string, object> { {"Number", "MX-123"}, {"Date", new DateTime(2017, 04, 19)}, {"Caption", "Счет"} }; string template = "{{Caption}} №{{Number}} от {{Date}}"; "Счет №MX-123 от 19.04.17"

Слайд 24





Demo 2 (шаблонизатор)
Описание слайда:
Demo 2 (шаблонизатор)

Слайд 25





3. WWW-Authenticate challenge
HTTP 401 Unauthorized
# Basic challenge
WWW-Authenticate: Basic realm="FooCorp"
 
# OAuth 2.0 challenge after sending an expired token
WWW-Authenticate: Bearer realm="FooCorp", error=invalid_token, error_description="The access token has expired"
Описание слайда:
3. WWW-Authenticate challenge HTTP 401 Unauthorized # Basic challenge WWW-Authenticate: Basic realm="FooCorp"   # OAuth 2.0 challenge after sending an expired token WWW-Authenticate: Bearer realm="FooCorp", error=invalid_token, error_description="The access token has expired"

Слайд 26





3. WWW-Authenticate challenge
# from RFC-2617 (HTTP Basic and Digest authentication)
 
challenge      = auth-scheme 1*SP 1#auth-param
auth-scheme    = token
auth-param     = token "=" ( token | quoted-string )
 
# from RFC2616 (HTTP/1.1)
 
token          = 1*<any CHAR except CTLs or separators>
separators     = "(" | ")" | "<" | ">" | "@"
               | "," | ";" | ":" | "\" | <">
               | "/" | "[" | "]" | "?" | "="
               | "{" | "}" | SP | HT
quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext         = <any TEXT except <">>
quoted-pair    = "\" CHAR
Описание слайда:
3. WWW-Authenticate challenge # from RFC-2617 (HTTP Basic and Digest authentication)   challenge      = auth-scheme 1*SP 1#auth-param auth-scheme    = token auth-param     = token "=" ( token | quoted-string )   # from RFC2616 (HTTP/1.1)   token          = 1*<any CHAR except CTLs or separators> separators     = "(" | ")" | "<" | ">" | "@"                | "," | ";" | ":" | "\" | <">                | "/" | "[" | "]" | "?" | "="                | "{" | "}" | SP | HT quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> ) qdtext         = <any TEXT except <">> quoted-pair    = "\" CHAR

Слайд 27





Demo 3 (WWW-Authenticate challenge)
Описание слайда:
Demo 3 (WWW-Authenticate challenge)

Слайд 28





Автор библиотеки
Nicholas Blumhardt

Контрибьютор других известных библиотек
Описание слайда:
Автор библиотеки Nicholas Blumhardt Контрибьютор других известных библиотек

Слайд 29





Парсеры, построенные на
Sprache
Описание слайда:
Парсеры, построенные на Sprache

Слайд 30





Евгений Романовский
Евгений Романовский
Описание слайда:
Евгений Романовский Евгений Романовский



Похожие презентации
Mypresentation.ru
Загрузить презентацию