diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/parser.nim | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index 9f4897665..2c514ee74 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -16,20 +16,37 @@ # In fact the grammar is generated from this file: -when isMainModule: +when isMainModule or defined(nimTestGrammar): # Leave a note in grammar.txt that it is generated: #| # This file is generated by compiler/parser.nim. - import pegs + import std/pegs when defined(nimPreviewSlimSystem): import std/syncio - var outp = open("doc/grammar.txt", fmWrite) - for line in lines("compiler/parser.nim"): - if line =~ peg" \s* '#| ' {.*}": - outp.write matches[0], "\L" - outp.close - - import ".." / tools / grammar_nanny - checkGrammarFile() + + proc writeGrammarFile(x: string) = + var outp = open(x, fmWrite) + for line in lines("compiler/parser.nim"): + if line =~ peg" \s* '#| ' {.*}": + outp.write matches[0], "\L" + outp.close + + when defined(nimTestGrammar): + import std/os + from ../testament/lib/stdtest/specialpaths import buildDir + const newGrammarText = buildDir / "grammar.txt" + + if not dirExists(buildDir): + createDir(buildDir) + + writeGrammarFile(newGrammarText) + + proc checkSameGrammar*() = + doAssert sameFileContent(newGrammarText, "doc/grammar.txt"), + "execute 'nim r compiler.nim' to keep grammar.txt up-to-date" + else: + writeGrammarFile("doc/grammar.txt") + import ".." / tools / grammar_nanny + checkGrammarFile() import llstream, lexer, idents, strutils, ast, msgs, options, lineinfos, |