Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Add C support#663

Closed
jtojnar wants to merge 4 commits into
github:mainfrom
jtojnar:c
Closed

Add C support#663
jtojnar wants to merge 4 commits into
github:mainfrom
jtojnar:c

Conversation

@jtojnar

@jtojnar jtojnar commented Dec 18, 2021

Copy link
Copy Markdown

Just a basic C parsing support (no tags) based on tree-sitter/haskell-tree-sitter#294.

You can try it by checking out the haskell-tree-sitter branch from tree-sitter/haskell-tree-sitter#294, setting the path in cabal.project.local in the semantic root (e.g. packages: ../haskell-tree-sitter/tree-sitter-c) and then run RUNFILES_DIR=path/to/haskell-tree-sitter cabal run semantic-ast -- --rootdir=. --language=C (I have no idea to make Bazel use local Haskell packages).

Recent revisions of C++ support UTF-8, UTF-16 and UTF-32 literals:
https://en.cppreference.com/w/cpp/language/string_literal

Since the UTF-16 and UTF-32 literals only differ in case,
they produce the same identifiers:

src/Language/C/AST.hs:5543:1: error:
    Multiple declarations of ‘AnonymousUDQuote’
    Declared at: src/Language/C/AST.hs:4694:1
                 src/Language/C/AST.hs:5543:1
     |
5543 | type AnonymousUDQuote = AST.Token.Token "u\"" 114
     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

src/Language/C/AST.hs:5545:1: error:
    Multiple declarations of ‘AnonymousUSQuote’
    Declared at: src/Language/C/AST.hs:4696:1
                 src/Language/C/AST.hs:5545:1
     |
5545 | type AnonymousUSQuote = AST.Token.Token "u'" 108
     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It is still documented in the README and much more convenient than Bazel.
Just basic parsing support, no tags.
@patrickt

patrickt commented Jan 3, 2022

Copy link
Copy Markdown
Contributor

This is very cool. How does the tree-sitter-c package handle #include facilities and the like? The preprocessor is a harsh mistress.

@jtojnar

jtojnar commented Jan 3, 2022

Copy link
Copy Markdown
Author

Not sure, I never managed to get it working because tree sitter itself was segfaulting for me half the time so I switched to Coccinelle.

@CleanCut CleanCut closed this Apr 1, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants