mirror of
https://github.com/AdaCore/langkit.git
synced 2026-02-12 12:28:12 -08:00
42 lines
862 B
Plaintext
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 {
|
|
}
|
|
|