19 个版本
0.13.7 | 2024年6月14日 |
---|---|
0.13.4 | 2024年1月4日 |
0.13.3 | 2023年9月21日 |
0.13.1 | 2023年1月27日 |
0.9.0 | 2020年7月6日 |
#9 in 解析工具
1,065 每月下载量
650KB
14K SLoC
nimbleparse
nimbleparse
是一个简单的语法调试助手。它接受 Lex 规范、Yacc 规范和输入文件作为输入,并将有关规范(例如,移位/归约错误)的任何警告以及生成的解析树打印到 stdout。如果解析失败,它将报告解析错误和可能的修复。如果解析成功,nimbleparse
将退出代码为 0;如果检测到错误,则退出代码为 1。
完整的命令行规范如下
nimbleparse [-r <cpctplus|none>] [-y <eco|grmtools|original>] [-q] <lexer.l> <parser.y> <input file>
其中
-r
选择要使用的恢复算法。默认为cpctplus
。-
选择要使用的 Yacc 变体。默认为original
。-
防止报告警告(例如,移位/归约错误)。
您可以使用自己的 Lex/Yacc 文件。可以在 https://github.com/softdevteam/grammars/ 找到一个小型的示例语法存储库。
一个示例调用如下
$ cat Hello.java
class Hello {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
$ nimbleparse java7.l java7.y Hello.java
goal
compilation_unit
type_declarations_opt
type_declarations
type_declaration
class_declaration
modifiers_opt
CLASS class
IDENTIFIER Hello
type_parameters_opt
super_opt
interfaces_opt
class_body
LBRACE {
class_body_declarations_opt
class_body_declarations
class_body_declaration
class_member_declaration
method_declaration
method_header
modifiers_opt
modifiers
modifiers
modifier
PUBLIC public
modifier
STATIC static
VOID void
method_declarator
IDENTIFIER main
LPAREN (
formal_parameter_list_opt
formal_parameter_list
formal_parameter
type
reference_type
array_type
name
simple_name
IDENTIFIER String
dims
LBRACK [
RBRACK ]
variable_declarator_id
IDENTIFIER args
RPAREN )
throws_opt
method_body
block
LBRACE {
block_statements_opt
block_statements
block_statement
statement
statement_without_trailing_substatement
expression_statement
statement_expression
method_invocation
qualified_name
name
qualified_name
name
simple_name
IDENTIFIER System
DOT .
IDENTIFIER out
DOT .
IDENTIFIER println
LPAREN (
argument_list_opt
argument_list
expression
assignment_expression
conditional_expression
conditional_or_expression
conditional_and_expression
inclusive_or_expression
exclusive_or_expression
and_expression
equality_expression
instanceof_expression
relational_expression
shift_expression
additive_expression
multiplicative_expression
unary_expression
unary_expression_not_plus_minus
postfix_expression
primary
primary_no_new_array
literal
STRING_LITERAL "Hello world"
RPAREN )
SEMICOLON ;
RBRACE }
RBRACE }
$ cat SyntaxError.java
class SyntaxError {
int x y;
}
$ nimbleparse java7.l java7.y Hello.java
goal
compilation_unit
type_declarations_opt
type_declarations
type_declaration
class_declaration
modifiers_opt
CLASS class
IDENTIFIER SyntaxError
type_parameters_opt
super_opt
interfaces_opt
class_body
LBRACE {
class_body_declarations_opt
class_body_declarations
class_body_declaration
class_member_declaration
field_declaration
modifiers_opt
type
primitive_type
numeric_type
integral_type
INT int
variable_declarators
variable_declarators
variable_declarator
variable_declarator_id
IDENTIFIER x
COMMA
variable_declarator
variable_declarator_id
IDENTIFIER y
SEMICOLON ;
RBRACE }
Parsing error at line 2 column 11. Repair sequences found:
1: Insert ,
2: Insert =
3: Delete y
依赖关系
~4–13MB
~143K SLoC