Skip to content

Commit f74a75d

Browse files
authored
Rewrite the scanner in C (#56)
1 parent 4ba9dab commit f74a75d

File tree

9 files changed

+438
-146
lines changed

9 files changed

+438
-146
lines changed

.clang-format

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
AlignArrayOfStructures: Left
2+
BasedOnStyle: LLVM
3+
IndentCaseLabels: true
4+
IndentGotoLabels: true
5+
IndentPPDirectives: AfterHash
6+
IndentWidth: 2
7+
KeepEmptyLinesAtTheStartOfBlocks: false
8+
SeparateDefinitionBlocks: Always
9+
SortIncludes: CaseInsensitive
10+
SpaceAfterCStyleCast: false
11+
SpaceAfterLogicalNot: false
12+
SpaceBeforeCaseColon: false

.gitattributes

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
/src/**/* linguist-generated=true
2-
/src/scanner.cc linguist-generated=false
2+
/src/scanner.c linguist-generated=false
33
# Exclude test files from language stats
44
/test/**/*.ex linguist-documentation=true

Package.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ let package = Package(
3030
],
3131
sources: [
3232
"src/parser.c",
33-
"src/scanner.cc",
33+
"src/scanner.c",
3434
],
3535
resources: [
3636
.copy("queries")

binding.gyp

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"sources": [
1010
"bindings/node/binding.cc",
1111
"src/parser.c",
12-
"src/scanner.cc"
12+
"src/scanner.c"
1313
],
1414
"cflags_c": [
1515
"-std=c99",

bindings/rust/build.rs

+1-20
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,15 @@ fn main() {
22
let src_dir = std::path::Path::new("src");
33

44
let mut c_config = cc::Build::new();
5-
c_config.include(&src_dir);
5+
c_config.include(src_dir);
66
c_config
77
.flag_if_supported("-Wno-unused-parameter")
88
.flag_if_supported("-Wno-unused-but-set-variable")
99
.flag_if_supported("-Wno-trigraphs");
1010
let parser_path = src_dir.join("parser.c");
1111
c_config.file(&parser_path);
1212

13-
// If your language uses an external scanner written in C,
14-
// then include this block of code:
15-
16-
/*
1713
let scanner_path = src_dir.join("scanner.c");
1814
c_config.file(&scanner_path);
1915
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
20-
*/
21-
22-
c_config.compile("parser");
23-
println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
24-
25-
let mut cpp_config = cc::Build::new();
26-
cpp_config.cpp(true);
27-
cpp_config.include(&src_dir);
28-
cpp_config
29-
.flag_if_supported("-Wno-unused-parameter")
30-
.flag_if_supported("-Wno-unused-but-set-variable");
31-
let scanner_path = src_dir.join("scanner.cc");
32-
cpp_config.file(&scanner_path);
33-
cpp_config.compile("scanner");
34-
println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
3516
}

docs/parser.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ For detailed introduction see the official guide on [Creating parsers](https://t
3333
3434
Essentially, we define relevant language rules in `grammar.js`, based on which
3535
Tree-sitter generates parser code (under `src/`). In some cases, we want to write
36-
custom C++ code for tokenizing specific character sequences (in `src/scanner.cc`).
36+
custom C code for tokenizing specific character sequences (in `src/scanner.c`).
3737
3838
The grammar rules may often conflict with each other, meaning that the given
3939
sequence of tokens has multiple valid interpretations given one _token_ of lookahead.

0 commit comments

Comments
 (0)