1- @namespace Platform.Protocols.Lino
1+ @namespace Platform.Protocols.Lino
22@classname Parser
33@using System.Linq
44document <IList<Link<string>>> = #{ state["IndentationStack"] = new Stack<int>(); state["IndentationStack"].Push(0); } _ l:links eof { l.ToLinksList() } / #{ state["IndentationStack"] = new Stack<int>(); state["IndentationStack"].Push(0); } _ eof { new List<Link<string>>() }
@@ -8,26 +8,24 @@ line <LinksGroup<string>> = CHECK_INDENTATION l:element { l }
88element <LinksGroup<string>> = e:anyLink PUSH_INDENTATION l:links { new LinksGroup<string>(e, l) } / e:anyLink { new LinksGroup<string>(e) }
99referenceOrLink <Link<string>> = l:multiLineAnyLink { l } / i:reference { i }
1010anyLink <Link<string>> = ml:multiLineAnyLink eol { ml } / sl:singleLineAnyLink { sl }
11- multiLineAnyLink <Link<string>> = multiLinePointLink / multiLineValueLink / multiLineLink
12- singleLineAnyLink <Link<string>> = fl:singleLineLink eol { fl } / pl:singleLinePointLink eol { pl } / vl:singleLineValueLink eol { vl }
11+ multiLineAnyLink <Link<string>> = multiLineValueLink / multiLineLink
12+ singleLineAnyLink <Link<string>> = fl:singleLineLink eol { fl } / vl:singleLineValueLink eol { vl }
1313multiLineValueAndWhitespace <Link<string>> = value:referenceOrLink _ { value }
1414multiLineValues <IList<Link<string>>> = _ list:multiLineValueAndWhitespace* { list }
1515singleLineValueAndWhitespace <Link<string>> = __ value:referenceOrLink { value }
1616singleLineValues <IList<Link<string>>> = list:singleLineValueAndWhitespace+ { list }
1717singleLineLink <Link<string>> = __ id:(reference) __ ":" v:singleLineValues { new Link<string>(id, v) }
1818multiLineLink <Link<string>> = "(" _ id:(reference) _ ":" v:multiLineValues _ ")" { new Link<string>(id, v) }
19- singleLineValueLink <Link<string>> = v:singleLineValues { new Link<string>(v) }
20- multiLineValueLink <Link<string>> = "(" v:multiLineValues _ ")" { new Link<string>(v) }
21- pointLink <Link<string>> = id:(reference) { new Link<string>(id) }
22- singleLinePointLink<Link<string>> = __ l:pointLink { l }
23- multiLinePointLink<Link<string>> = "(" _ l:pointLink _ ")" { l }
19+ singleLineValueLink <Link<string>> = v:singleLineValues { v.Count == 1 && v[0].Id != null && (v[0].Values == null || v[0].Values.Count == 0) ? new Link<string>(v[0].Id) : new Link<string>(v) }
20+ multiLineValueLink <Link<string>> = "(" v:multiLineValues _ ")" { v.Count == 1 && v[0].Id != null && (v[0].Values == null || v[0].Values.Count == 0) ? new Link<string>(v[0].Id) : new Link<string>(v) }
21+
2422reference <string> = doubleQuotedReference / singleQuotedReference / simpleReference
2523simpleReference <string> = "" referenceSymbol+
2624doubleQuotedReference <string> = '"' r:([^"]+) '"' { string.Join("", r) }
2725singleQuotedReference <string> = "'" r:([^']+) "'" { string.Join("", r) }
2826PUSH_INDENTATION = spaces:" "* &{ spaces.Count > state["IndentationStack"].Peek() } #{ state["IndentationStack"].Push(spaces.Count); }
2927POP_INDENTATION = #{ state["IndentationStack"].Pop(); }
30- CHECK_INDENTATION = spaces:" "* &{ spaces.Count = = state["IndentationStack"].Peek() }
28+ CHECK_INDENTATION = spaces:" "* &{ spaces.Count > = state["IndentationStack"].Peek() }
3129eol = __ ("" [\r\n]+ / eof)
3230eof = !.
3331__ = [ \t]*
0 commit comments