File: README.md

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (37 lines) | stat: -rw-r--r-- 1,636 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# clang pseudoparser

This directory implements an approximate heuristic parser for C++, based on the
clang lexer, the C++ grammar, and the GLR parsing algorithm.

It parses a file in isolation, without reading its included headers.
The result is a strict syntactic tree whose structure follows the C++ grammar.
There is no semantic analysis, apart from guesses to disambiguate the parse.
Disambiguation can optionally be guided by an AST or a symbol index.

For now, the best reference on intended scope is the [design proposal],
with further discussion on the [RFC].

## Dependencies between pseudoparser and clang

Dependencies are limited because they don't make sense, but also to avoid
placing a burden on clang mantainers.

The pseudoparser reuses the clang lexer (clangLex and clangBasic libraries) but
not the higher-level libraries (Parse, Sema, AST, Frontend...).

When the pseudoparser should be used together with an AST (e.g. to guide
disambiguation), this is a separate "bridge" library that depends on both.

Clang does not depend on the pseudoparser at all. If this seems useful in future
it should be discussed by RFC.

## Parity between pseudoparser and clang

The pseudoparser aims to understand real-world code, and particularly the
languages and extensions supported by Clang.

However we don't try to keep these in lockstep: there's no expectation that
Clang parser changes are accompanied by pseudoparser changes or vice versa.

[design proposal]: https://docs.google.com/document/d/1eGkTOsFja63wsv8v0vd5JdoTonj-NlN3ujGF0T7xDbM/edit
[RFC]: https://discourse.llvm.org/t/rfc-a-c-pseudo-parser-for-tooling/59217/49