Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ jcc Public

Case study of a minimalist C compiler built in JavaScript

Notifications You must be signed in to change notification settings

adrianbrs/jcc

Repository files navigation

JCC - (削除) GNU (削除ここまで) JavaScript Compiler Collection

Case study of a minimalist C compiler built in JavaScript

Installing dependencies

> npm install

Build & Run

Build

> npm run build

Build (watch mode)

> npm run build:watch

Start

> npm start

or

> npm exec jcc

Start (development mode)

> npm run start:dev

Aliasing

Local

> alias jcc="npm exec jcc"
> jcc --help

Global

> npm link
> jcc --help

Commands

> jcc
Usage: jcc [options] [command]
Case study of a minimalist C compiler built in JavaScript
Options:
 -V, --version output the version number
 -h, --help display help for command
Commands:
 lexeme [options] <filepath> Extract lexemes from source code
 help [command] display help for command

Lexemes

> jcc lexeme --help
Usage: jcc lexeme [options] <filepath>
Extract lexemes from source code
Arguments:
 filepath Path to source code file
Options:
 -V, --version output the version number
 -e, --encoding <encoding> Encoding of source code file (default: "utf-8")
 -ll, --log-level Minimum log level to display (choices: "error", "warn", "note", "log", "all", "none")
 -h, --help display help for command

Example:

> jcc lexeme examples/ExemploParaTabelaDeIdentificadores.c
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:2:4]
2000 identifier "num1" [examples/ExemploParaTabelaDeIdentificadores.c:2:9]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:2:10]
1026 struct "struct" [examples/ExemploParaTabelaDeIdentificadores.c:3:7]
2000 identifier "data" [examples/ExemploParaTabelaDeIdentificadores.c:3:12]
5000 l_brace "{" [examples/ExemploParaTabelaDeIdentificadores.c:4:2]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:5:8]
2000 identifier "dia" [examples/ExemploParaTabelaDeIdentificadores.c:5:12]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:5:13]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:6:8]
2000 identifier "mes" [examples/ExemploParaTabelaDeIdentificadores.c:6:12]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:6:13]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:7:8]
2000 identifier "ano" [examples/ExemploParaTabelaDeIdentificadores.c:7:12]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:7:13]
5001 r_brace "}" [examples/ExemploParaTabelaDeIdentificadores.c:8:2]
2000 identifier "datanasc" [examples/ExemploParaTabelaDeIdentificadores.c:8:11]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:8:12]
1012 float "float" [examples/ExemploParaTabelaDeIdentificadores.c:10:6]
2000 identifier "calcula" [examples/ExemploParaTabelaDeIdentificadores.c:10:14]
5004 l_paren "(" [examples/ExemploParaTabelaDeIdentificadores.c:10:15]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:10:18]
2000 identifier "p1" [examples/ExemploParaTabelaDeIdentificadores.c:10:21]
5008 comma "," [examples/ExemploParaTabelaDeIdentificadores.c:10:22]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:10:26]
5021 star "*" [examples/ExemploParaTabelaDeIdentificadores.c:10:28]
2000 identifier "p2" [examples/ExemploParaTabelaDeIdentificadores.c:10:30]
5005 r_paren ")" [examples/ExemploParaTabelaDeIdentificadores.c:10:31]
5000 l_brace "{" [examples/ExemploParaTabelaDeIdentificadores.c:11:2]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:12:8]
2000 identifier "r" [examples/ExemploParaTabelaDeIdentificadores.c:12:10]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:12:11]
2000 identifier "r" [examples/ExemploParaTabelaDeIdentificadores.c:13:6]
5011 equal "=" [examples/ExemploParaTabelaDeIdentificadores.c:13:8]
2000 identifier "p1" [examples/ExemploParaTabelaDeIdentificadores.c:13:11]
5021 star "*" [examples/ExemploParaTabelaDeIdentificadores.c:13:13]
2000 identifier "p2" [examples/ExemploParaTabelaDeIdentificadores.c:13:16]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:13:17]
1021 return "return" [examples/ExemploParaTabelaDeIdentificadores.c:14:11]
2000 identifier "r" [examples/ExemploParaTabelaDeIdentificadores.c:14:13]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:14:14]
5001 r_brace "}" [examples/ExemploParaTabelaDeIdentificadores.c:15:2]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:16:4]
2000 identifier "main" [examples/ExemploParaTabelaDeIdentificadores.c:16:9]
5004 l_paren "(" [examples/ExemploParaTabelaDeIdentificadores.c:16:10]
5005 r_paren ")" [examples/ExemploParaTabelaDeIdentificadores.c:16:11]
5000 l_brace "{" [examples/ExemploParaTabelaDeIdentificadores.c:17:2]
1003 char "char" [examples/ExemploParaTabelaDeIdentificadores.c:18:9]
2000 identifier "livro" [examples/ExemploParaTabelaDeIdentificadores.c:18:15]
5002 l_bracket "[" [examples/ExemploParaTabelaDeIdentificadores.c:18:16]
3000 number_literal "100" [examples/ExemploParaTabelaDeIdentificadores.c:18:19]
5003 r_bracket "]" [examples/ExemploParaTabelaDeIdentificadores.c:18:20]
5002 l_bracket "[" [examples/ExemploParaTabelaDeIdentificadores.c:18:21]
3000 number_literal "255" [examples/ExemploParaTabelaDeIdentificadores.c:18:24]
5003 r_bracket "]" [examples/ExemploParaTabelaDeIdentificadores.c:18:25]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:18:26]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:19:8]
2000 identifier "num1" [examples/ExemploParaTabelaDeIdentificadores.c:19:13]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:19:14]
1012 float "float" [examples/ExemploParaTabelaDeIdentificadores.c:20:10]
2000 identifier "num2" [examples/ExemploParaTabelaDeIdentificadores.c:20:15]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:20:16]
2000 identifier "num2" [examples/ExemploParaTabelaDeIdentificadores.c:21:9]
5011 equal "=" [examples/ExemploParaTabelaDeIdentificadores.c:21:11]
2000 identifier "calcula" [examples/ExemploParaTabelaDeIdentificadores.c:21:19]
5004 l_paren "(" [examples/ExemploParaTabelaDeIdentificadores.c:21:20]
2000 identifier "num1" [examples/ExemploParaTabelaDeIdentificadores.c:21:24]
5008 comma "," [examples/ExemploParaTabelaDeIdentificadores.c:21:25]
2000 identifier "num2" [examples/ExemploParaTabelaDeIdentificadores.c:21:30]
5005 r_paren ")" [examples/ExemploParaTabelaDeIdentificadores.c:21:31]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:21:32]
1015 if "if" [examples/ExemploParaTabelaDeIdentificadores.c:22:7]
5004 l_paren "(" [examples/ExemploParaTabelaDeIdentificadores.c:22:9]
2000 identifier "num2" [examples/ExemploParaTabelaDeIdentificadores.c:22:13]
5005 r_paren ")" [examples/ExemploParaTabelaDeIdentificadores.c:22:14]
5000 l_brace "{" [examples/ExemploParaTabelaDeIdentificadores.c:23:6]
1017 int "int" [examples/ExemploParaTabelaDeIdentificadores.c:24:12]
2000 identifier "p1" [examples/ExemploParaTabelaDeIdentificadores.c:24:15]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:24:16]
2000 identifier "p1" [examples/ExemploParaTabelaDeIdentificadores.c:25:11]
5015 slash_equal "/=" [examples/ExemploParaTabelaDeIdentificadores.c:25:14]
2000 identifier "num2" [examples/ExemploParaTabelaDeIdentificadores.c:25:19]
5009 semicolon ";" [examples/ExemploParaTabelaDeIdentificadores.c:25:20]
5001 r_brace "}" [examples/ExemploParaTabelaDeIdentificadores.c:26:6]
5001 r_brace "}" [examples/ExemploParaTabelaDeIdentificadores.c:27:2]

Syntax analysis

> jcc sint --help
Usage: jcc sint [options] <filepath>
Perform syntactic analysis on the source file
Arguments:
 filepath Path to source code file
Options:
 -e, --encoding <encoding> Encoding of source code file (default: "utf-8")
 -h, --help display help for command

Example

Uncomment some errors in the example file and run the syntax analyzer to view the error messages.

> npm run sint:example
0: int []
0: TYPE_PRIMITIVE []
0: TYPE []
0: TYPE identifier []
0: SINGLE_DECLARATION []
0: DECLARATION []
0: DECLARATION equal []
0: DECLARATION equal number_literal []
0: DECLARATION equal EXPRESSION []
0: DECLARATION_ASSIGNMENT []
...
0: STATEMENT DECLARATION []
0: STATEMENT DECLARATION semicolon []
examples/example.c:7:7(utf-8): error: conflicting types for 'a'; have 'float'
7 | float a;
 | ^

About

Case study of a minimalist C compiler built in JavaScript

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /