[PegGrammar] Wiki parser
От: alvas  
Дата: 28.05.11 04:53
Оценка:
Вот синтаксис



Вот тестовая страница

Помогите сдвинуться с места
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: [PegGrammar] Wiki parser
От: para  
Дата: 28.05.11 05:06
Оценка:
Здравствуйте, alvas, Вы писали:

A>Вот синтаксис


A>Вот тестовая страница


A>Помогите сдвинуться с места


какую структуру вы хотите на выходе парсера?
свой тип АСТ или например XML-АСТ?
Re[2]: [PegGrammar] Wiki parser
От: alvas  
Дата: 28.05.11 05:13
Оценка:
Здравствуйте, para, Вы писали:

P>Здравствуйте, alvas, Вы писали:


A>>Вот синтаксис


A>>Вот тестовая страница


A>>Помогите сдвинуться с места


P>какую структуру вы хотите на выходе парсера?

P>свой тип АСТ или например XML-АСТ?

Без разницы.


  [PegGrammar(Options = EmitDebugSources,
    null,
    grammar
    {
      any = ['\u0000'..'\uFFFF'];
    }
  )]



А дальше что?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: [PegGrammar] Wiki parser
От: Ziaw Россия  
Дата: 28.05.11 05:36
Оценка:
Здравствуйте, alvas, Вы писали:

A>>>Помогите сдвинуться с места


A>
A>  [PegGrammar(Options = EmitDebugSources,
A>    null,
A>    grammar
A>    {
A>      any = ['\u0000'..'\uFFFF'];
        node = italic / bold / list / ...;
        italic = "//" (!"//" any) "//";
        bold = "**" (!"**" any) "**";
        ...
A>    }
A>  )]
A>



A>А дальше что?
Re[4]: [PegGrammar] Wiki parser
От: alvas  
Дата: 28.05.11 05:44
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, alvas, Вы писали:


A>>>>Помогите сдвинуться с места


A>>
A>>  [PegGrammar(Options = EmitDebugSources,
A>>    null,
A>>    grammar
A>>    {
A>>      any = ['\u0000'..'\uFFFF'];
Z>        node = italic / bold / list / ...;
Z>        italic = "//" (!"//" any) "//";
Z>        bold = "**" (!"**" any) "**";
Z>        ...
A>>    }
A>>  )]
A>>



A>>А дальше что?


Большое спасибо, но это только для парных

**bold** or //italic//


А для одинарных?

* item a
* item b
** subitem


http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[5]: [PegGrammar] Wiki parser
От: hardcase Пират http://nemerle.org
Дата: 28.05.11 06:18
Оценка:
Здравствуйте, alvas, Вы писали:

A>А для одинарных?


A>

A>* item a
A>* item b
A>** subitem


A>


А одинарные оканчиваются на конец строки.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: [PegGrammar] Wiki parser
От: Ziaw Россия  
Дата: 28.05.11 06:37
Оценка:
Здравствуйте, alvas, Вы писали:

A>А для одинарных?


" * " (!"\n" any) "\n"
Re[6]: [PegGrammar] Wiki parser
От: hardcase Пират http://nemerle.org
Дата: 28.05.11 06:38
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, alvas, Вы писали:


A>>А для одинарных?


A>>

A>>* item a
A>>* item b
A>>** subitem


A>>


H>А одинарные оканчиваются на конец строки.

Вернее на два конца строки или на следующий элемент списка:

lineEnd          = "\r"? "\n";
nodeBreak        = lineEnd lineEnd;
bulletListItem   = "*"+ (!("*" / nodeBreak) any)*;
numberedListItem = "#"+ (!("#" / nodeBreak) any)*;
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: [PegGrammar] Wiki parser
От: alvas  
Дата: 28.05.11 07:27
Оценка:
Здравствуйте, Ziaw, Вы писали:

Этот пример возвращает None

using System;
using Nemerle.Peg;
using System.Console;

namespace WikiPeg
{
    
  [PegGrammar(Options = EmitDebugSource, start, 
grammar
{
        any = ['\u0000'..'\uFFFF'];
        node = italic / bold ;// li;
        italic = "//" (!"//" any) "//";
        bold = "**" (!"**" any) "**";  
        //li = " * " (!"\n" any) "\n";
        start   : string = node;        
})]
public sealed class WikiParser
  {
    start(token: NToken)   : string
    {
      def res = GetText(token);
      res;
    }
  }

  module Program
  {
    Main() : void
    {
      def parser = WikiParser();
      def rez = parser.Parse("**hello**");
      WriteLine(rez);
      _ = ReadLine();
    }
  }

}
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[5]: [PegGrammar] Wiki parser
От: Ka3a4oK  
Дата: 28.05.11 10:06
Оценка: +1
A>[/c#]
Забыл вставить повтор. Правило any — это любой символ. А тебе нужно — любая строка. Потому так:

italic = "//" (!"//" any)* "//";
bold = "**" (!"**" any)* "**";
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[4]: [PegGrammar] Wiki parser
От: Ka3a4oK  
Дата: 28.05.11 10:12
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, alvas, Вы писали:


A>>>>Помогите сдвинуться с места


A>>
A>>  [PegGrammar(Options = EmitDebugSources,
A>>    null,
A>>    grammar
A>>    {
A>>      any = ['\u0000'..'\uFFFF'];
Z>        node = italic / bold / list / ...;
Z>        italic = "//" (!"//" any) "//";
Z>        bold = "**" (!"**" any) "**";
Z>        ...
A>>    }
A>>  )]
A>>



A>>А дальше что? :xz


Мне думается, что внутри bold, italic могут находися элементы разметки, на котрые должны влиять эти модификаторы, т.е. там не просто any*.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.