{"size": 1545, "ext": "scrbl", "max_stars_repo_path": "documentation/docs/wal.scrbl", "max_stars_repo_name": "LucasKl/wal", "max_stars_repo_stars_event_min_datetime": "2021-11-06T19:39:56.000Z", "max_stars_repo_stars_event_max_datetime": "2022-03-31T19:53:24.000Z", "max_issues_repo_path": "documentation/docs/wal.scrbl", "max_issues_repo_name": "LucasKl/wal", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "documentation/docs/wal.scrbl", "max_forks_repo_name": "LucasKl/wal", "max_forks_repo_forks_event_min_datetime": "2021-11-06T19:39:43.000Z", "max_forks_repo_forks_event_max_datetime": "2022-01-25T13:30:09.000Z"}
{"max_stars_count": 27, "max_issues_count": null, "max_forks_count": 3, "avg_line_length": 38.625, "max_line_length": 121, "alphanum_fraction": 0.7482200647}
#lang scribble/manual
@title{WAL: Waveform Analysis Language}
@author{Lucas Klemmer, Institute for Complex Systems ICS}

The @bold{W}aveform @bold{A}nalysis @bold{L}anguage (WAL) is a @italic{Domain Specific Language} (DSL) for analyzing
waveforms produced by hardware simulators. It gives developers the tools they need to naturally express hardware analyzis
problems.

@section{Introduction}
The core unit of WAL are expressions. An expression can be either literals, symbols, or lists.
Literals are data like @racket[1] or @racket["hello"]. Symbols are names that can refer to variables,
signals or functions. Some examples for signals are @racket[x], @racket[Top.module1.input], or @racket[print].


@section{WAL API}
This section contains the documentation for all WAL functions.

@subsection{Organization}
Organization function can be used to load and step through waveforms as well as introducing aliases for signals.

@defproc[(load [path string] [id symbol]) ()]{
    Loads the waveform in file @racket[path] and makes it available to WAL code usign the id id.
}

@defproc[(step [id symbol all] [amount integer 1]) ()]{
    Step trace @racket[id] by @racket[amount]. Both arguments are optional.
    If no @racket[id] is provided @italic{all} traces will be stepped by @racket[amount].
}

@defproc[(alias [name symbol] [signal symbol]) ()]{
    Introduces an alias for @racket[signal] such that it can be also referenced using @racket[name]. 
}

@defproc[(unalias [name symbol]) ()]{
    Removes the alias @racket[name].
}

@section{}

