diff --git a/src/parser/shrimp.grammar b/src/parser/shrimp.grammar index 741dad0..3dbddd8 100644 --- a/src/parser/shrimp.grammar +++ b/src/parser/shrimp.grammar @@ -199,5 +199,5 @@ expressionWithoutIdentifier { } block { - (consumeToTerminator newlineOrSemicolon)* + (consumeToTerminator? newlineOrSemicolon)* } \ No newline at end of file diff --git a/src/parser/shrimp.ts b/src/parser/shrimp.ts index 1db89f9..50cb347 100644 --- a/src/parser/shrimp.ts +++ b/src/parser/shrimp.ts @@ -7,9 +7,9 @@ import {highlighting} from "./highlight" const spec_Identifier = {__proto__:null,do:52, end:58, null:74, if:88, elseif:96, else:100} export const parser = LRParser.deserialize({ version: 14, - states: ".jQVQbOOO#XQcO'#CrO$RQRO'#CsO$aQcO'#DmO$xQbO'#DsOOQ`'#Cu'#CuO%QQbO'#CqO%rOSO'#CzOOQa'#Dq'#DqO&QOpO'#DSO&VQcO'#DpOOQ`'#Dn'#DnO&nQbO'#DmO&|QbO'#EQOOQ`'#DX'#DXO'kQRO'#DaOOQ`'#Dm'#DmO'pQQO'#DlOOQ`'#Dl'#DlOOQ`'#Db'#DbQVQbOOOOQa'#Dp'#DpOOQ`'#Cp'#CpO'xQbO'#DUOOQ`'#Do'#DoOOQ`'#Dc'#DcO(SQbO,59ZO&|QbO,59_O&|QbO,59_OOQ`'#Dd'#DdO(pQbO'#CwO(xQQO,5:_O)iQRO'#CsO)yQRO,59]O*[QRO,59]O*VQQO,59]O+VQQO,59]O+_QbO'#C|O+gQWO'#C}OOOO'#Dy'#DyOOOO'#Df'#DfO+{OSO,59fOOQa,59f,59fO,ZO`O,59nO,`QbO'#DgO,eQbO,59YO,vQRO,5:lO,}QQO,5:lO-SQbO,59{OOQ`,5:W,5:WOOQ`-E7`-E7`OOQ`,59p,59pOOQ`-E7a-E7aOOQa1G.y1G.yO-^QcO1G.yOOQ`-E7b-E7bO-xQbO1G/yO&|QbO,59`O&|QbO,59`OOQa1G.w1G.wOOOO,59h,59hOOOO,59i,59iOOOO-E7d-E7dOOQa1G/Q1G/QOOQa1G/Y1G/YO!QQbO'#CrOOQ`,5:R,5:ROOQ`-E7e-E7eO.VQbO1G0WOOQ`1G/g1G/gO.dQbO7+%eO.iQbO7+%fOOQO1G.z1G.zO.vQRO1G.zOOQ`'#DZ'#DZOOQ`7+%r7+%rO/QQbO7+%sOOQ`<lAN>lO&|QbO'#D]OOQ`'#Dh'#DhO0_QbOAN>yO0jQQO'#D_OOQ`AN>yAN>yO0oQbOAN>yO0tQRO,59wO0{QQO,59wOOQ`-E7f-E7fOOQ`G24eG24eO1QQbOG24eO1VQQO,59yO1[QQO1G/cOOQ`LD*PLD*PO.iQbO1G/eO/QQbO7+$}OOQ`7+%P7+%POOQ`<lAN>lO&|QbO'#D]OOQ`'#Dh'#DhO0hQbOAN>yO0sQQO'#D_OOQ`AN>yAN>yO0xQbOAN>yO0}QRO,59wO1UQQO,59wOOQ`-E7f-E7fOOQ`G24eG24eO1ZQbOG24eO1`QQO,59yO1eQQO1G/cOOQ`LD*PLD*PO.iQbO1G/eO/TQbO7+$}OOQ`7+%P7+%POOQ`< spec_Identifier[value] || -1}], - tokenPrec: 753 + tokenPrec: 762 }) diff --git a/src/parser/tests/multiline.test.ts b/src/parser/tests/multiline.test.ts index 27bddc7..7ac995a 100644 --- a/src/parser/tests/multiline.test.ts +++ b/src/parser/tests/multiline.test.ts @@ -71,4 +71,20 @@ end keyword end `) }) + + test('multiline with empty lines', () => { + expect(` + do: + 2 + + end + `).toMatchTree(` + FunctionDef + keyword do + Params + colon : + Number 2 + keyword end + `) + }) })