Add class name literals.

This commit is contained in:
Trey Evans 2021-02-01 13:21:49 -05:00
parent 15e412bd4e
commit b974b3df3e
2 changed files with 60 additions and 1 deletions

View File

@ -8,6 +8,14 @@ describe('class diagram, ', function () {
parser.yy = classDb;
});
it('should handle backquoted class names', function() {
const str =
'classDiagram\n' +
'class `Car`';
parser.parse(str);
});
it('should handle relation definitions', function () {
const str =
'classDiagram\n' +
@ -20,6 +28,18 @@ describe('class diagram, ', function () {
parser.parse(str);
});
it('should handle backquoted relation definitions', function () {
const str =
'classDiagram\n' +
'`Class01` <|-- Class02\n' +
'Class03 *-- Class04\n' +
'Class05 o-- Class06\n' +
'Class07 .. Class08\n' +
'Class09 -- Class1';
parser.parse(str);
});
it('should handle relation definition of different types and directions', function () {
const str =
'classDiagram\n' +
@ -67,6 +87,17 @@ describe('class diagram, ', function () {
parser.parse(str);
});
it('should handle generic class with a literal name', function() {
const str =
'classDiagram\n' +
'class `Car`~T~\n' +
'Driver -- `Car` : drives >\n' +
'`Car` *-- Wheel : have 4 >\n' +
'`Car` -- Person : < owns';
parser.parse(str);
});
it('should break when another `{`is encountered before closing the first one while defining generic class with brackets', function() {
const str =
'classDiagram\n' +
@ -125,6 +156,22 @@ describe('class diagram, ', function () {
parser.parse(str);
});
it('should handle generic class with brackets and a literal name', function() {
const str =
'classDiagram\n' +
'class `Dummy_Class`~T~ {\n' +
'String data\n' +
' void methods()\n' +
'}\n' +
'\n' +
'class Flight {\n' +
' flightNumber : Integer\n' +
' departureTime : Date\n' +
'}';
parser.parse(str);
});
it('should handle class definitions', function() {
const str =
'classDiagram\n' +

View File

@ -7,6 +7,7 @@
/* lexical grammar */
%lex
%x string
%x bqstring
%x generic
%x struct
%x href
@ -49,6 +50,10 @@
<string>["] this.popState();
<string>[^"]* return "STR";
[`] this.begin("bqstring");
<bqstring>[`] this.popState();
<bqstring>[^`]+ return "BQUOTE_STR";
/*
---interactivity command---
'href' adds a link to the specified node. 'href' can only be specified when the
@ -214,10 +219,15 @@ statements
;
className
: alphaNumToken { $$=$1; }
:
| alphaNumToken { $$=$1; }
| classLiteralName { $$=$1; }
| alphaNumToken className { $$=$1+$2; }
| classLiteralName className { $$=$1+$2; }
| alphaNumToken GENERICTYPE className { $$=$1+'~'+$2+$3; }
| classLiteralName GENERICTYPE className { $$=$1+'~'+$2+$3; }
| alphaNumToken GENERICTYPE { $$=$1+'~'+$2; }
| classLiteralName GENERICTYPE { $$=$1+'~'+$2; }
;
statement
@ -309,4 +319,6 @@ textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ;
alphaNumToken : UNICODE_TEXT | NUM | ALPHA;
classLiteralName : BQUOTE_STR;
%%