Parse incorrect attributes but semantic error
This commit is contained in:
parent
6768a35808
commit
2db02b9326
2 changed files with 7 additions and 7 deletions
|
@ -28,13 +28,9 @@ location_attribute =
|
||||||
location = >location_header items:{ block } ;
|
location = >location_header items:{ block } ;
|
||||||
|
|
||||||
|
|
||||||
name_and_description =
|
attributes =
|
||||||
name:/[^\n]*?(?= +-- | +:: | +€ |\n)/
|
name:/[^\n]*?(?= +-- | +:: | +€ |\n)/
|
||||||
[ s '--' ~ s description:/[^\n]*?(?= +:: | +€ |\n)/ ]
|
[ s '--' ~ s description:/[^\n]*?(?= +:: | +€ |\n)/ ]
|
||||||
;
|
|
||||||
|
|
||||||
attributes =
|
|
||||||
>name_and_description
|
|
||||||
[ s '::' {s ('{' tags+:identifier '}')} ]
|
[ s '::' {s ('{' tags+:identifier '}')} ]
|
||||||
[ [ s '::' ~ ] s price:price ]
|
[ [ s '::' ~ ] s price:price ]
|
||||||
;
|
;
|
||||||
|
@ -60,7 +56,7 @@ indent_choice_entry = n '\t\t' >choice_entry ;
|
||||||
|
|
||||||
# Toplevel choice definitions
|
# Toplevel choice definitions
|
||||||
choice_block =
|
choice_block =
|
||||||
id:identifier ':' s >name_and_description entries:{ noindent_choice_entry }
|
id:identifier ':' s >attributes entries:{ noindent_choice_entry }
|
||||||
n
|
n
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -70,7 +66,7 @@ choice_block =
|
||||||
indent_choice_block =
|
indent_choice_block =
|
||||||
'\t' type:choice_type s
|
'\t' type:choice_type s
|
||||||
(
|
(
|
||||||
| kind:`declaration` id:identifier ':' ~ s >name_and_description entries:{ indent_choice_entry }
|
| kind:`declaration` id:identifier ':' ~ s >attributes entries:{ indent_choice_entry }
|
||||||
| kind:`reference` id:identifier [ s price:price ]
|
| kind:`reference` id:identifier [ s price:price ]
|
||||||
)
|
)
|
||||||
n
|
n
|
||||||
|
|
|
@ -6,6 +6,7 @@ import itertools
|
||||||
from typing import Iterable, List, Union, Tuple
|
from typing import Iterable, List, Union, Tuple
|
||||||
from tatsu import parse as tatsu_parse
|
from tatsu import parse as tatsu_parse
|
||||||
from tatsu.ast import AST
|
from tatsu.ast import AST
|
||||||
|
from tatsu.exceptions import SemanticError
|
||||||
from .models import Location, Choice, Option, Dish
|
from .models import Location, Choice, Option, Dish
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +52,9 @@ class HldsSemanticActions:
|
||||||
)
|
)
|
||||||
|
|
||||||
def choice_block(self, ast) -> Choice:
|
def choice_block(self, ast) -> Choice:
|
||||||
|
if ast["price"] or ast["tags"]:
|
||||||
|
raise SemanticError("Choice blocks cannot have price or tags, put them on each of its options instead")
|
||||||
|
|
||||||
return Choice(
|
return Choice(
|
||||||
ast["id"],
|
ast["id"],
|
||||||
name=ast["name"],
|
name=ast["name"],
|
||||||
|
|
Loading…
Reference in a new issue