./bin/shrimp parse file
This commit is contained in:
parent
f14013aa55
commit
bf0f781762
26
bin/shrimp
26
bin/shrimp
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
import { Compiler } from '../src/compiler/compiler'
|
import { Compiler } from '../src/compiler/compiler'
|
||||||
import { colors, globals } from '../src/prelude'
|
import { colors, globals } from '../src/prelude'
|
||||||
|
import { parser } from '../src/parser/shrimp'
|
||||||
|
import { treeToString } from '../src/utils/tree'
|
||||||
import { VM, fromValue, bytecodeToString } from 'reefvm'
|
import { VM, fromValue, bytecodeToString } from 'reefvm'
|
||||||
import { readFileSync, writeFileSync, mkdirSync } from 'fs'
|
import { readFileSync, writeFileSync, mkdirSync } from 'fs'
|
||||||
import { randomUUID } from "crypto"
|
import { randomUUID } from 'crypto'
|
||||||
import { spawn } from 'child_process'
|
import { spawn } from 'child_process'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
|
|
||||||
|
|
@ -32,6 +34,17 @@ async function compileFile(filePath: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function parseFile(filePath: string) {
|
||||||
|
try {
|
||||||
|
const code = readFileSync(filePath, 'utf-8')
|
||||||
|
const tree = parser.parse(code)
|
||||||
|
return treeToString(tree, code)
|
||||||
|
} catch (error: any) {
|
||||||
|
console.error(`${colors.red}Error:${colors.reset} ${error.message}`)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function showHelp() {
|
function showHelp() {
|
||||||
console.log(`${colors.bright}${colors.magenta}🦐 Shrimp${colors.reset} is a scripting language in a shell.
|
console.log(`${colors.bright}${colors.magenta}🦐 Shrimp${colors.reset} is a scripting language in a shell.
|
||||||
|
|
||||||
|
|
@ -39,6 +52,7 @@ ${colors.bright}Usage:${colors.reset} shrimp <command> [...args]
|
||||||
|
|
||||||
${colors.bright}Commands:${colors.reset}
|
${colors.bright}Commands:${colors.reset}
|
||||||
${colors.cyan}run ${colors.yellow}./my-file.sh${colors.reset} Execute a file with Shrimp
|
${colors.cyan}run ${colors.yellow}./my-file.sh${colors.reset} Execute a file with Shrimp
|
||||||
|
${colors.cyan}parse ${colors.yellow}./my-file.sh${colors.reset} Print parse tree for Shrimp file
|
||||||
${colors.cyan}bytecode ${colors.yellow}./my-file.sh${colors.reset} Print bytecode for Shrimp file
|
${colors.cyan}bytecode ${colors.yellow}./my-file.sh${colors.reset} Print bytecode for Shrimp file
|
||||||
${colors.cyan}eval ${colors.yellow}'some code'${colors.reset} Evaluate a line of Shrimp code
|
${colors.cyan}eval ${colors.yellow}'some code'${colors.reset} Evaluate a line of Shrimp code
|
||||||
${colors.cyan}repl${colors.reset} Start REPL
|
${colors.cyan}repl${colors.reset} Start REPL
|
||||||
|
|
@ -102,6 +116,16 @@ async function main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (['parse', '-parse', '--parse', '-p'].includes(command)) {
|
||||||
|
const file = args[1]
|
||||||
|
if (!file) {
|
||||||
|
console.log(`${colors.bright}usage: shrimp parse <file>${colors.reset}`)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
console.log(await parseFile(file))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (['run', '-run', '--run', '-r'].includes(command)) {
|
if (['run', '-run', '--run', '-r'].includes(command)) {
|
||||||
const file = args[1]
|
const file = args[1]
|
||||||
if (!file) {
|
if (!file) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user