UNPKG

struct-compile

Version:

Create a JavaScript class from a C structure

38 lines (31 loc) 1.92 kB
import { createToken, Lexer } from 'chevrotain'; import { matchType } from './dataTypes.js'; export const allTokens = []; const addToken = (tk) => { const res = createToken(tk); allTokens.push(res); return res; } export const tokens = {}; tokens.WhiteSpace = addToken({ name: 'Whitespace', pattern: /[\s\n]+/, group: Lexer.SKIPPED, }); tokens.MultiLineComment = addToken({ name: 'MultiLineComment', pattern: /\/\*.*?\*\//, group: Lexer.SKIPPED, }); tokens.Const = addToken({ name: 'Const', pattern: /const/, group: Lexer.SKIPPED }); tokens.Pointer = addToken({ name: 'Pointer', pattern: /\*/ }); tokens.Semicolon = addToken({ name: 'Semicolon', pattern: /;/ }); tokens.Colon = addToken({ name: 'Colon', pattern: /:/ }); tokens.OneLineComment = addToken({ name: 'OneLineComment', pattern: /\/\/.*?\n/ }); tokens.RoundBracketOpen = addToken({ name: 'RoundBracketOpen', pattern: /\(/ }); tokens.RoundBracketClose = addToken({ name: 'RoundBracketClose', pattern: /\)/ }); tokens.SquareBracketOpen = addToken({ name: 'SquareBracketOpen', pattern: /\[/ }); tokens.SquareBracketClose = addToken({ name: 'SquareBracketClose', pattern: /\]/ }); tokens.BracesOpen = addToken({ name: 'BracesOpen', pattern: /\{/ }); tokens.BracesClose = addToken({ name: 'BracesClose', pattern: /\}/ }); tokens.TypeKeyword = addToken({ name: 'TypeKeyword', pattern: { exec: matchType }, line_breaks: true }); tokens.Struct = addToken({ name: 'Struct', pattern: /struct/ }); tokens.Attributes = addToken({ name: 'Attributes', pattern: /__attribute__/ }); tokens.CString = addToken({ name: 'CString', pattern: /"([^"]*)"/ }); tokens.Identifier = addToken({ name: 'Identifier', pattern: /[_a-zA-Z][\w_]*/ }); tokens.Comma = addToken({ name: 'Comma', pattern: /,/ }); tokens.Num = addToken({ name: 'Num', pattern: /[0-9]+/ }); tokens.AnyToken = addToken({ name: 'AnyToken', pattern: /./ }); export const StructLexer = new Lexer(allTokens);