Files
2026-01-20 16:03:43 +00:00

42 lines
862 B
Plaintext

# Test that basic rewriting API usage behaves as expected
from lexer_example import foo_lexer
@with_lexer(foo_lexer)
@with_unparsers
grammar foo_grammar {
@main_rule main_rule <- list*(or(var_rule | skip(ErrorDecl)))
name <- Name(@Identifier)
var_rule <- Var("var" name "=" value)
value <- Literal(@Number)
}
@abstract
class FooNode implements Node[FooNode] {
}
@abstract
class Decl: FooNode {
@abstract @parse_field @nullable name: Name
@abstract @parse_field @nullable expr: Literal
}
class ErrorDecl: Decl implements ErrorNode {
@parse_field @null_field name: Name
@parse_field @null_field expr: Literal
}
class Var: Decl {
@parse_field name: Name
@parse_field expr: Literal
}
@custom_short_image
class Literal: FooNode implements TokenNode {
}
@custom_short_image
class Name: FooNode implements TokenNode {
}