Skip to content

Commit c0a4cf1

Browse files
committed
Update tests to use 'singlet' terminology and adjust parser rules for single links (part of #64)
1 parent 4f14418 commit c0a4cf1

File tree

3 files changed

+12
-14
lines changed

3 files changed

+12
-14
lines changed

csharp/Platform.Protocols.Lino.Tests/EdgeCaseParserTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public static void TestAllFeaturesTest()
5555
input = "(: value1 value2)";
5656
Assert.Throws<FormatException>(() => new Parser().Parse(input));
5757

58-
// Test point link
59-
input = "(point)";
58+
// Test singlet link
59+
input = "(singlet)";
6060
result = new Parser().Parse(input);
6161
Assert.NotEmpty(result);
6262

csharp/Platform.Protocols.Lino.Tests/SingleLineParserTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ public static void ParseValuesOnlyTest()
108108
}
109109

110110
[Fact]
111-
public static void TestPointLinkTest()
111+
public static void TestSingletLinkTest()
112112
{
113-
// Test point link
114-
var input = "(point)";
113+
// Test singlet link
114+
var input = "(singlet)";
115115
var result = new Parser().Parse(input);
116116
Assert.NotEmpty(result);
117117
}

csharp/Platform.Protocols.Lino/Parser.peg

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@namespace Platform.Protocols.Lino
1+
@namespace Platform.Protocols.Lino
22
@classname Parser
33
@using System.Linq
44
document <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 }
88
element <LinksGroup<string>> = e:anyLink PUSH_INDENTATION l:links { new LinksGroup<string>(e, l) } / e:anyLink { new LinksGroup<string>(e) }
99
referenceOrLink <Link<string>> = l:multiLineAnyLink { l } / i:reference { i }
1010
anyLink <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 }
1313
multiLineValueAndWhitespace <Link<string>> = value:referenceOrLink _ { value }
1414
multiLineValues <IList<Link<string>>> = _ list:multiLineValueAndWhitespace* { list }
1515
singleLineValueAndWhitespace <Link<string>> = __ value:referenceOrLink { value }
1616
singleLineValues <IList<Link<string>>> = list:singleLineValueAndWhitespace+ { list }
1717
singleLineLink <Link<string>> = __ id:(reference) __ ":" v:singleLineValues { new Link<string>(id, v) }
1818
multiLineLink <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+
2422
reference <string> = doubleQuotedReference / singleQuotedReference / simpleReference
2523
simpleReference <string> = "" referenceSymbol+
2624
doubleQuotedReference <string> = '"' r:([^"]+) '"' { string.Join("", r) }
2725
singleQuotedReference <string> = "'" r:([^']+) "'" { string.Join("", r) }
2826
PUSH_INDENTATION = spaces:" "* &{ spaces.Count > state["IndentationStack"].Peek() } #{ state["IndentationStack"].Push(spaces.Count); }
2927
POP_INDENTATION = #{ state["IndentationStack"].Pop(); }
30-
CHECK_INDENTATION = spaces:" "* &{ spaces.Count == state["IndentationStack"].Peek() }
28+
CHECK_INDENTATION = spaces:" "* &{ spaces.Count >= state["IndentationStack"].Peek() }
3129
eol = __ ("" [\r\n]+ / eof)
3230
eof = !.
3331
__ = [ \t]*

0 commit comments

Comments
 (0)